重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

学校の課題がわからないので教えてください。


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問も質問してすみません。
このプログラミングのレポートを提出しなくてはならないので困ってます。
何卒よろしくお願いします。

A 回答 (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 ;
}

とかで良いと思うけど、人のプログラムを、そのまま提出したり、変数名を変えた程度で提出するの、どうかと思うので、自分の物にしてくださいね。
    • good
    • 0
この回答へのお礼

こんばんは。
即レスありがとうございます。
自宅のPCにUNIXのソフトがないためにプログラム実行、お礼が遅くなってすみませんでした。

>>>1のほうは数列として考えるのはわかりました。
初項=3、等差数列の一般項の式an=3*(an-1)-2
というのも問題文からわかるのですが、これをどのようにプログラムすればいいのかわかりません。

>引数に1、2、3、4、5・・・を与えたときの返り値を求めよ。

これに対して、an=1のとき、an=2のとき・・・とプログラムしていき、最後に整数値nを入れたときにはどうなるか、ってことを実行すればいいのかと私は思っているのですが、関数のプログラミングを作るのは初めてでテキストや上記の回答を見ながら考えたんですがよくわかりませんでした。


>>>2のほうはそのまま実行したところ、mainの未定義のシンボルエラーが出てしまいました。上記のプログラムの他に肉付けをしなければいけなかったんでしょうか?


回答して頂いたのにお礼が遅くなって本当に申し訳ありませんでした。ありがとうございました。

お礼日時:2003/07/07 21:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!