ページ 1 / 1
C言語 再帰関数 総和問題
Posted: 2022年7月07日(木) 10:54
by 田中
こんにちは。大学の課題で手詰まりになったので質問させていただきます。
問題内容は「整数aとbを入力して、aからbまでの和Sを求めるプログラム。ただし、整数mとn(
n≥m)を引数、mからnまでの和を戻り値とする再帰関数sumofを定義して利用すること。」です。
プログラムもうまくいきませんし、2つの値を使うのがうまくできません。(1つの値から0までならできました。)
よろしくお願いします。
コード:
#include<stdio.h>
int sumof(int n, int m)
{
int S;
if (n == 1 && m == 0)
return 1;
else
S = n + sumof(n - 1);
return S;
}
int main(void) {
int a;
int b;
int S;
scanf("%d,%d", &a, &b);
printf("%dか%dの総和は%dです。\n", a, b,S );
return 0;
}
Re: C言語 再帰関数 総和問題
Posted: 2022年7月07日(木) 19:53
by みけCAT
m<nのとき、「mからnまでの和」は、「m+(m+1からnまでの和)」と表すことができます。
m=nのとき、「mからnまでの和」はmです。
sumof関数の実装は、これをプログラムにすればいいでしょう。
さらに、sumof関数を呼び出すため、main関数のscanfの呼び出しとprintfの呼び出しの間に、
を追加するといいでしょう。
(a, bとm, nの対応関係に注意)
Re: C言語 再帰関数 総和問題
Posted: 2022年7月08日(金) 12:23
by 田中
みけCATさん
ありがとうございます。
Re: C言語 再帰関数 総和問題
Posted: 2022年7月08日(金) 12:57
by usao
せっかくだから俺は
「mからnまでの和」を「m+n+(m+1からn-1までの和)」ということにするぜ!
コード:
int sumof( int m, int n )
{
if( m > n )return 0;
if( m==n )return m;
return m + n + sumof(m+1,n-1);
}
Re: C言語 再帰関数 総和問題
Posted: 2022年7月08日(金) 13:03
by usao
区間を半分にしていくとか.
コード:
int sumof( int m, int n )
{
if( m > n )return 0;
if( m==n )return m;
int h = (m+n)/2;
return sumof(m,h) + sumof(h+1,n);
}
Re: C言語 再帰関数 総和問題
Posted: 2022年7月08日(金) 19:14
by 参照魚
>1つの値から0までならできました。
であれば、nの総和からmの総和を引くという方法もあります。
無駄も多いし、求められている解ではないですが、まあそんなのもあるということで。
Re: C言語 再帰関数 総和問題
Posted: 2022年7月09日(土) 10:26
by 田中
usaoさん
いろいろな考え方ありがとうございます。
どちらの考え方も自分でできるよう頑張ります!
Re: C言語 再帰関数 総和問題
Posted: 2022年7月09日(土) 10:28
by 田中
参照魚さん
なるほど。
その考え方なら確かにできたかもですね。。
自分の力に合わせて考えてくださりありがとうございます!