「フィボナッチ数を次の手順で求めるプログラムfib2.cを作成。
再帰関数 int fib(int n)を定義し,再帰呼出しによりfib(n)の値を求める。n=30までのフィボナッチ数を求めて表示せよ。
またどのnの値まで求めるか?」という問題です。
で下記のように作りましたが再帰関数をつかわなかったので再提出になってしまいました。
再帰関数はどうやって使うのでしょうか。
今回の場合はどの部分が再帰関数になるのでしょうか?
おねがいします。
#include<stdio.h>
main()
{
int fib[100], i;
fib[0] = 0;
fib[1] = 1;
printf("F0=0\nF1=1\n");
for(i=2; i<=30; i++)
{
fib[i] = fib[i-1]+fib[i-2];
printf("F%d=%d\n",i, fib[i]);
}
}
No.3ベストアンサー
- 回答日時:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
long fib_a(int n); //再帰版
long fib_b(int n); //非再帰版
int main(){
int n;
printf("0以上45以下の整数を入力せよ");
scanf("%d",&n);
assert(0<=n && n<=45);
printf("フィボナッチ数列の第%d項:%ld,%ld\n",n,fib_a(n),fib_b(n));
return EXIT_SUCCESS;
}
long fib_a(int n)
{
return n < 2 ? 1 : fib_a(n-1)+fib_a(n-2);
}
long fib_b(int n)
{
long e,f,w;
int i;
e=0; f=1;
for(i=0;i<n;i++){
w=f; f+=e; e=w;
}
return f;
}
No.2
- 回答日時:
大まかなプログラムの構造は以下の様な感じであると思います。
----------------------------------------------------------------------
#include<stdio.h>
int fib(int n);
int main(int argc, char *argv[])
{
int n;
for(n = 0; n <= 30; n++)
{
printf("fib(%d)=%d\n",n, fib(n));
}
}
int fib(int n)
{
/*
* TODO:フィボナッチ数を求める処理をここに記述
*/
return 0;
}
----------------------------------------------------------------------
再起関数ですが、
fib()関数内より、fib()関数を呼び出すような処理を記述してあげるとよいでしょう。
「fib(n - 1);」等です。
No.1
- 回答日時:
int fib(n){
if ( n <= 1 ) return 1;
return fib(n-1) + fib(n-2);
}
fib()の中でfib()を呼ぶようなのが再帰。
これは自分の中で自分を二回呼んでるので難易度高?
一時変数の無いことに注目してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
複数桁10進数の*桁目だけを抽出...
-
systemの戻り値を取得する方法
-
PowerShellがうまくいかない
-
std::set<int> で、ある値が何...
-
c言語
-
式は定数値が必要です」という...
-
C言語で行列の積を計算できるよ...
-
変数名を引数として渡す、アド...
-
C++ でカンマ "," で区切られた...
-
if と配列の組み合わせ
-
C++で作ったDLLをC#で使うには?
-
C言語についてなんですが
-
ラップ関数とはどんなものですか?
-
VC#2005で逆さ文字を表示する
-
「{ } で囲むだけ」は正しい?
-
C言語のファイル入力が分かりま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
system関数がうまくいかない
-
(int *)の意味
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
C言語初心者です、、、お助けく...
-
std::set<int> で、ある値が何...
-
PowerShellがうまくいかない
-
read関数をノンブロッキングで...
-
ColorをRGBで指定する方法
-
(マルチスレッド)_beginthrea...
-
数字列を3桁ごとにカンマで区切...
-
C言語で分からないところがあり...
おすすめ情報