プロが教えるわが家の防犯対策術!

かなり(約三時間)悩んでまだ分からないので質問します。
再帰関数を用いて配列の中の数字(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 回答 (3件)

#2 です。

二つ目、間違えた。

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

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

# 確認してません。って、この間違いを見ても分かるか (^^;
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/02/03 13:37

こんな感じかしら。



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

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

配列の合計を求めることができるか、という問題ではなく、再帰関数を分かってますか、と
いう問題だから、仕方ないね。
    • good
    • 0

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


// 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) ;
}

あ、検証してないですからね。
バグってたらデバッグはご自分でお願いします。
    • good
    • 1
この回答へのお礼

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

お礼日時:2003/02/03 13:37

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