• 締切済み

C言語の関数について。

学校の課題がわからないので教えてください。 1. 次の関数recfunc()は関数内で自分自身を呼び出す再起関数である。 int recfunc(int x){ if(x<=0)return -1; else if(x==1) return 3; else return 3*recfunc(x-1)-2; } 引数に1,2,3,4,5,...を与えたときの返り値を求めよ。その結果から、一般に 整数値nが与えられたとき、どのような値が計算されるか推測せよ。 一体何を返す関数だろうか?またどのようにその計算が実現されているか を簡潔に述べよ。 2.どのような再帰関数も、再帰を用いない関数に書き換えることができる。 問題1の関数recfunc()と同じ引数、同じ返り値をもつ再帰を用いない関数 func()を作成せよ。 2問も質問してすみません。 このプログラミングのレポートを提出しなくてはならないので困ってます。 何卒よろしくお願いします。

みんなの回答

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんにちは レポートは自分でやりましょうね。 C言語のプログラム自身が解らないのですか? それともプログラムの一部分が解らないのですか? とは言っても困っているようですので、 1. recfunc(1) = 3 recfunc(2) = 3*recfunc(1)-2 = 3*3-2 = 7 recfunc(3) = 3*recfunc(2)-2 = 3*7-2 = 19 recfunc(4) = 3*recfunc(3)-2 = 3*19-2 = 55 recfunc(5) = 3*recfunc(4)-2 = 3*55-2 = 163 ・・・ recfunc(n) = 3*recfunc(n-1)-2 って、プログラムに書いてある通りですね。 あとはご自分で肉付けしてくださいな。 2. int func(int x) {   int i ;   if ( x <= 0 ){     return -1 ;   }   for (i=3 ;x>1 ;x--){     i = 3*i-2 ;   }   return i ; } とかで良いと思うけど、人のプログラムを、そのまま提出したり、変数名を変えた程度で提出するの、どうかと思うので、自分の物にしてくださいね。

osiato
質問者

お礼

こんばんは。 即レスありがとうございます。 自宅のPCにUNIXのソフトがないためにプログラム実行、お礼が遅くなってすみませんでした。 >>>1のほうは数列として考えるのはわかりました。 初項=3、等差数列の一般項の式an=3*(an-1)-2 というのも問題文からわかるのですが、これをどのようにプログラムすればいいのかわかりません。 >引数に1、2、3、4、5・・・を与えたときの返り値を求めよ。 これに対して、an=1のとき、an=2のとき・・・とプログラムしていき、最後に整数値nを入れたときにはどうなるか、ってことを実行すればいいのかと私は思っているのですが、関数のプログラミングを作るのは初めてでテキストや上記の回答を見ながら考えたんですがよくわかりませんでした。 >>>2のほうはそのまま実行したところ、mainの未定義のシンボルエラーが出てしまいました。上記のプログラムの他に肉付けをしなければいけなかったんでしょうか? 回答して頂いたのにお礼が遅くなって本当に申し訳ありませんでした。ありがとうございました。

関連するQ&A