• ベストアンサー

再帰関数を用いて配列の合計を求める

かなり(約三時間)悩んでまだ分からないので質問します。 再帰関数を用いて配列の中の数字(floatで定義されている)の合計を求めるプログラムを作っています。階乗を求めるプログラムの例を見ながらやっているのですがもう降参です。簡単だと思ったんですけど配列と組み合わせでもう頭がパニックです。どなたか答え(またはヒント)を教えてください。 よろしくお願いします。 なお、下のプログラムは私が1から作りましたので完全に間違っている可能性大です。参考にしないでください。(^^ゞ #include <iostream> using namespace std; float recur(int numF); int main() { int num; float sum; cout << "Enter an integer number: "; cin >> num; //再帰関数なんてこうやれば使わなくても出来るのに~! // for(i=0; i<num; i++) // sum += array[i]; sum = recur(num); cout << "The sum of all the numbers: " << sum << endl; return 0; } float recur(int numF) { int i; float array[numF]; //定数式が必要です、と怒られる for(i=0; i<numF; i++) return array[i] += array[i-1]; //ここに再帰の式が必要 }

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

#2 です。二つ目、間違えた。 >   return sum(array, num - 1) + array[0];   return sum(array, num - 1) + array[num - 1]; # 確認してません。って、この間違いを見ても分かるか (^^;

ginkgo
質問者

お礼

出来ました! 私が思っていたよりもやっぱり難しかったです。 もっともっと勉強します。 ありがとうございました!

その他の回答 (2)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

こんな感じかしら。 double sum(double array[], int num) {  if (num == 1) {   return array[0];  } else {   return array[0] + sum(&array[1], num - 1);  } } とか、 double sum(double array[], int num) {  if (num == 1) {   return array[0];  } else {   return sum(array, num - 1) + array[0];  } } > //再帰関数なんてこうやれば使わなくても出来るのに~! 配列の合計を求めることができるか、という問題ではなく、再帰関数を分かってますか、と いう問題だから、仕方ないね。

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

//再帰関数なんてこうやれば使わなくても出来るのに~! // for(i=0; i<num; i++) // sum += array[i]; これがわかってるんだから後は簡単ですよ。 再起関数は「配列の先頭アドレス」と「要素数」を受け取るようにすればいいんです。 たとえば… float recur(float * arry, int num) {   if (num == 0) {     return 0.0 ;   }   return *arry + recur(&arry[1], num - 1) ; } あ、検証してないですからね。 バグってたらデバッグはご自分でお願いします。

ginkgo
質問者

お礼

出来ました! 私が思っていたよりもやっぱり難しかったです。 もっともっと勉強します。 ありがとうございました!