
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
★アドバイス
・フィボナッチ数列の再帰関数は出来ましたね。
>0,1,1,2,3,5,8・・・と表示できるのかがわかりません。
↑
こんなにきれいには表示できないと思います。
何も printf() を入れなくてもよいのでは。
・ちょっと試行錯誤してみましたが意外に難しいですね。
下のサンプルで我慢して。
サンプル:
#include <stdio.h>
// フィボナッチ数列
int fib( int n )
{
if ( n == 0 ) return 0;
if ( n == 1 ){printf("\n1");return 1;}
n = fib(n - 1) + fib(n - 2);
printf( " + %d", n );
return n;
}
// メイン関数
int main( void )
{
// フィボナッチ数列
printf( "\nfib = %d\n", fib(9) );
return 0;
}
No.4
- 回答日時:
アドバイス。
http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/ …
Cじゃないけど,Tiny Basicのプログラムを参考にしてみたらもっとわかりやすいかも?
#『使うべきではない』とか書かれているのが気になるが(^^;;
宿題なら仕方ないかなあ・・・
No.3
- 回答日時:
★アドバイス
・フィボナッチ数列の代わりに 1 ~ n 番目までの数を加算するサンプルを載せます。
もちろん再帰的に処理する関数です。
これを参考に『フィボナッチ数列』の関数 int fib(int n) を作成して下さい。
・それでは下にサンプルを載せておきます。
サンプル:
#include <stdio.h>
// 1~n 番目までを再帰処理で加算する関数
int func_sum( int n )
{
if ( n > 0 ){
printf( "%d + ", n );
return n + func_sum( n - 1 );
}
else{
printf( "%d\n", n );
return 0;
}
}
// メイン関数
int main( void )
{
// 1~10 までを加算
printf( "sum = %d\n", func_sum(10) );
return 0;
}
その他
・動作を分かりやすくするために func_sum() 関数に printf() 関数を使っています。
実際に実行してみて動作の確認をして下さい。
表示される内容から再帰動作で 1 ~ n 番目の数の加算が分かると思います。
これを参考にして『フィボナッチ数列』の再帰関数を作ってみて下さい。
・以上。
この回答への補足
こんな感じで作ってみたんですけど、何処にprintf()を入れれば
0,1,1,2,3,5,8・・・と表示できるのかがわかりません。
よろしくお願いいたします。
#include <stdio.h>
int fib(int);
main()
{
printf("fib = %d\n", fib(10));
}
int fib(int n)
{
if(n == 0) return 0;
if(n == 1) return 1;
return fib(n - 1) + fib(n - 2);
}
No.2
- 回答日時:
> int f(0) = 0,f(1) = 1;
>
> f(n) = f(n - 1) + fib(n - 2);
fib関数以外にf関数も登場していますね。f関数は不要です。
数列の1番目:1(固定)
2番目:1(固定)
3番目:2(1番目+2番目)
4番目:3(2番目+3番目)
5番目:5(3番目+4番目)
6番目:8(4番目+5番目)
7番目:13(5番目+6番目)
8番目:21(6番目+7番目)
9番目:34(7番目+8番目)
10番目:55(8番目+9番目)
という結果を得るために、fib関数では呼び出し元に
どういう値を返す必要があるか、検討してみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
数字列を3桁ごとにカンマで区切...
-
if と配列の組み合わせ
-
「指定されたキャストは有効で...
-
int16_t の _t は何?
-
ラップ関数とはどんなものですか?
-
C言語での平滑化フィルタ
-
C言語で行列の積を計算できるよ...
-
実数の整数部,小数部の取得
-
VB6.0でコンピュータ名の取得
-
コンパイルエラー
-
(マルチスレッド)_beginthrea...
-
C言語で分からないところがあり...
-
毎回違う乱数を生成するにはど...
-
プログラミング☆
-
return 1L
-
C#のコンパイルエラーCS0120に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
ラップ関数とはどんなものですか?
-
エラー 添字が付けられた値が、...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
式は定数値が必要です」という...
-
(マルチスレッド)_beginthrea...
-
構造体の勉強中です 合計点の高...
-
「{ } で囲むだけ」は正しい?
-
数字列を3桁ごとにカンマで区切...
-
return 1L
-
C#のコンパイルエラーCS0120に...
-
std::set<int> で、ある値が何...
-
C言語で分からないところがあり...
-
PowerShellがうまくいかない
おすすめ情報