C言語 再帰関数 総和問題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
田中
記事: 10
登録日時: 1年前

C言語 再帰関数 総和問題

#1

投稿記事 by 田中 » 1年前

こんにちは。大学の課題で手詰まりになったので質問させていただきます。
問題内容は「整数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;
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: C言語 再帰関数 総和問題

#2

投稿記事 by みけCAT » 1年前

m<nのとき、「mからnまでの和」は、「m+(m+1からnまでの和)」と表すことができます。
m=nのとき、「mからnまでの和」はmです。
sumof関数の実装は、これをプログラムにすればいいでしょう。

さらに、sumof関数を呼び出すため、main関数のscanfの呼び出しとprintfの呼び出しの間に、

コード:

S = sumof(b, a);
を追加するといいでしょう。
(a, bとm, nの対応関係に注意)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

田中
記事: 10
登録日時: 1年前

Re: C言語 再帰関数 総和問題

#3

投稿記事 by 田中 » 1年前

みけCATさん
ありがとうございます。

アバター
usao
記事: 1887
登録日時: 11年前

Re: C言語 再帰関数 総和問題

#4

投稿記事 by usao » 1年前

せっかくだから俺は
「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);
}

アバター
usao
記事: 1887
登録日時: 11年前

Re: C言語 再帰関数 総和問題

#5

投稿記事 by usao » 1年前

区間を半分にしていくとか.

コード:

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

参照魚
記事: 109
登録日時: 6年前

Re: C言語 再帰関数 総和問題

#6

投稿記事 by 参照魚 » 1年前

>1つの値から0までならできました。
であれば、nの総和からmの総和を引くという方法もあります。
無駄も多いし、求められている解ではないですが、まあそんなのもあるということで。

田中
記事: 10
登録日時: 1年前

Re: C言語 再帰関数 総和問題

#7

投稿記事 by 田中 » 1年前

usaoさん
いろいろな考え方ありがとうございます。
どちらの考え方も自分でできるよう頑張ります!

田中
記事: 10
登録日時: 1年前

Re: C言語 再帰関数 総和問題

#8

投稿記事 by 田中 » 1年前

参照魚さん
なるほど。
その考え方なら確かにできたかもですね。。
自分の力に合わせて考えてくださりありがとうございます!

返信

“C言語何でも質問掲示板” へ戻る