-PR-
解決済み

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

  • すぐに回答を!
  • 質問No.462636
  • 閲覧数463
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 94% (132/139)

かなり(約三時間)悩んでまだ分からないので質問します。
再帰関数を用いて配列の中の数字(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]; //ここに再帰の式が必要
}
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル14

ベストアンサー率 50% (1122/2211)

#2 です。二つ目、間違えた。

>   return sum(array, num - 1) + array[0];

  return sum(array, num - 1) + array[num - 1];

# 確認してません。って、この間違いを見ても分かるか (^^;
お礼コメント
ginkgo

お礼率 94% (132/139)

出来ました!
私が思っていたよりもやっぱり難しかったです。
もっともっと勉強します。
ありがとうございました!
投稿日時 - 2003-02-03 13:37:41

その他の回答 (全2件)

  • 回答No.1
レベル13

ベストアンサー率 37% (570/1525)

//再帰関数なんてこうやれば使わなくても出来るのに~!
// 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

お礼率 94% (132/139)

出来ました!
私が思っていたよりもやっぱり難しかったです。
もっともっと勉強します。
ありがとうございました!
投稿日時 - 2003-02-03 13:37:22


  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

こんな感じかしら。

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];
 }
}

> //再帰関数なんてこうやれば使わなくても出来るのに~!

配列の合計を求めることができるか、という問題ではなく、再帰関数を分かってますか、と
いう問題だから、仕方ないね。
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ