ページ 11

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

Posted: 2016年4月19日(火) 16:52
by 高校生

コード:

#include <stdio.h>
#define NUM 11

int add(int n){
	if (n == 0) return 0;
	return add(n - 1) + n;
}

int main(){
	int i=NUM,g;

	g = add(i);

	printf("%d\n", g);

	return 0;
}
1から指定した数字までの奇数のみの数の合計を出したいのですが、うまくいきません。どうすればいいでしょうか。

Re: 再帰関数を用いて奇数の合計を求める

Posted: 2016年4月19日(火) 17:20
by みけCAT
1から指定した数字までの奇数のみの数の合計を出すプログラムに書き換えて、コンパイルして、実行すればいいでしょう。

コード:

#include <stdio.h>
#define NUM 11

int add(int n){
	if (n < 1) return 0;
	if (n % 2 == 0) return add(n - 1);
	return add(n - 2) + n;
}

int main(void){
	int i=NUM,g;

	g = add(i);

	printf("%d\n", g);

	return 0;
}

Re: 再帰関数を用いて奇数の合計を求める

Posted: 2016年4月19日(火) 21:45
by みけCAT
変更点は
  • 0に限らず、nが1未満だったら0を返すようにした
  • nが奇数でなかったら、1を引いて奇数にするようにした
  • 1ではなく2を引くことで、奇数から直接次の奇数に行くようにした
です。

Re: 再帰関数を用いて奇数の合計を求める

Posted: 2016年4月19日(火) 22:57
by 高校生
返信遅れました。
無事正常に動作しましたありがとうございました。

Re: 再帰関数を用いて奇数の合計を求める

Posted: 2016年4月19日(火) 23:07
by naohiro19
if( n % 2 == 1) で奇数
if( n % 2 == 0) で偶数
で求めることができます。