• 締切済み

フィボナッチ数列X(n+1)= X(n+1)+X(n) (X(1)=X

フィボナッチ数列X(n+1)= X(n+1)+X(n) (X(1)=X(2)=1) の1項X(1)からX(30)までの値を表示するプログラムを再帰関数を使って作る方法を教えてください。 再帰関数がよくわかりません。

みんなの回答

回答No.4

もうひとつの回答例。これを一般のソースに直せば良い。 /* Gcc on MacOSX * file name: fibonacci.c * compile : gcc fibonacci.c * execution: ./a.out <n> *       n >= 0 * example: ./a.out 30 */ #include <stdio.h> #include <stdlib.h> // atoi() int stage; int fibonacci(int, int, int); int main(int argc, char *argv[]) { if (argc != 2) return 1; stage = atoi(argv[--argc]); printf("fibonacci(%d) = %d\n", stage, fibonacci(0, 0, 1)); return 0; } int fibonacci(int generation, int present, int past) { printf("\tfibonacci(%d)= %d\n", generation, present); return stage == generation ? present : fibonacci(++generation, present + past, present); }

回答No.3

> 再帰関数がよくわかりません。 直接または間接的に自分自身を呼び出す関数です。 例: 階乗 f(n) = n*f(n-1) ( f(0) = 1) ) int factorial(int n) {   if ( n == 0 ) return 1;   return n * factorial(n-1); }

回答No.2

googleで「フィボナッチ数列 c言語」で検索すると一発で出てきたっぽいけど。。。

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

フィボナッチ数列自体が再帰的に定義されているので、これを再帰的に呼び出すだけです。 その後、実行効率についても考察しましょう。

関連するQ&A

  • フィボナッチ数列のプログラム

    問題で フィボナッチ数列のn番目の値を計算する関数 int fib(int n) を再帰的に定義し、この関数を利用してフィボナッチ数列の最初の10個を表示するプログラムを書けという問題があるのですが、大まかな流れは想像できるのですが、できないので困っております。  何方か教えてください。

  • フィボナッチ数列を関数に…

    フィボナッチ数列を関数に… フィボナッチ数列の一般項は Fn=(φ^n-(-φ)^n)/√5  (ただし、φは黄金比) で表されますが、それを f(x)=(φ^x-(-φ)^x)/√5 と関数で考えます。するとそのグラフは点々のグラフになります。 f(1)=1、f(2)=1、f(3)=2、f(4)=3、f(5)=5… それをどうにかして、連続したグラフにできないでしょうか? 特徴として ・どのx(実数)をとってもx+1に関数が存在する。 ・lim(x→∞)f(x+1)/f(x)=φ があげられると思います。 できるかできないかだけでも良いですので、回答よろしくお願いします。

  • フィボナッチ数列 プログラミング C言語

    「フィボナッチ数を次の手順で求めるプログラム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]); } }

  • フィボナッチ数列をつくってみたけれど・・・

    ちょうど学校でフィボナッチ数列の話題になったので、思いつきで作ってみました。 そこで、配列を使ったものと再帰呼び出しを使ったものを作りました。 //再帰呼び出し unsigned long Fibonacci(int n){ if(n==1){ return 1;} //初項 else if(n==2){ return 1;} //第2項 return Fibonacci(n-1) + Fibonacci(n-2); } //配列 unsigned long Fibonacci(int n){ unsigned long long f[101]; int i; f[1] = 1; f[2] = 1; for( i=3; i<=n; i++){ f[i] = f[i-1] + f[i-2]; } return f[n]; } この二つを比較すると明らかに配列の方が早いです。 ということは再帰呼び出しはあまり使わない方がよいってことですよね? この場合は配列も似たような感じで見ることができますし。 それとも自分の再帰の書き方が悪いのでしょうか。

  • フィボナッチ数列の一般化?

    数列{F_n}で、F_0=0、F_1=1が与えられていて、3項間の関係 F_(n+2)=F_(n+1)+F_nを満たすとき、フィボナッチ数列で、一般項も求まります。 これがF_0、F_1、F_2が与えられて、4項間の関係 F(n+3)=F_(n+2)+F_(n+1)+F_n を満たすとき、一般項は求まるのでしょうか。

  • Nフィボナッチ数列の一般項について

    つぎのようにNフィボナッチ数列を定義します。ただしNは自然数。 F(1)=F (2)=...=F(N)=1 F(N+n)=F(N)+F(N+1)+...F(N+n-1) (n≧0)-(1) またx^N=Σ[k=0~N-1]x^kのN次方程式のN個の解をA1,A2、...ANと名付けます。 N=2のとき フィボナッチ数列になりますが、 (1)を変形してF(n+2)=(A1+A2)F(n+1)-A1A2F(n) よって F(n+2)-A2F(n+1)=A1{F(n+1)-A2F(n)} F(n+2)-A1F(n+1)=A2{F(n+1)-A1F(n)} 2つの漸化式ができて、ともに右辺を等比数列の和として計算できますので 2つを連立して、F(n+1)について解くと一般項が得られます。 N=3のときも同様にして、一般項が求まります。 そこでNが任意の自然数でもこれは成り立つのでしょうか? 解と係数の関係からN個の連立方程式が導けるとしてもよいのでしょうか? どなたか教えてください。お願いします。

  • フィボナッチ数列 c言語

    c言語でフィボナッチ数列を求めるプログラムを再帰関数をつくり作れという問題でしたのように作りました。 windowsでcygwinというものを使ってコンパイルしています #include <stdio.h> int fib(int); main() { int n,i; printf(\"第何項までのフィボナッチ数? n=\"); scanf(\"%d\",&n); fib(0)=0; fib(1)=1; for(i=2;i<=n;i++){ print(\"f(%d)=%d\",n, fib(n));} } エラーは $ gcc fib2.c fib2.c: In function `main\': fib2.c:10: error: invalid lvalue in assignment fib2.c:10: error: invalid lvalue in assignment とでました。 どこかちがいますか?

  • フィボナッチ数列での第何項まで表示できるか。

    フィボナッチ数列は皆さん知っていると思いますが、 この数列を今C言語で第n項まで求めるプログラムをつくりました。 今はunsigned long long で printf("%llu") をつかい、94くらいまでは正しく表示させることが出来ました。 これ以上の項を求める場合に、この部分をどのようにかえればどのくらいの項まで表示できるのでしょうか? ただ、プログラム自体を変えるのは無しとします。 あくまで型と%を変える場合どこまでできるのかが知りたいのです。よろしくお願いします。

  • フィボナッチ数列 C言語プログラミング

    フィボナッチ数列について、 プログラミングが得意な方、お願いします! F(0)=0, a(1)=1, F(n+2)=F(n+1)+F(n) (n>=0) 「xを入力し、 S(k)>=xを満たす最小のk及びF(k)の値を表示し、更にその値をファイルに記録する」 非常に勝手ですが、早めにお願いします!><

  • フィボナッチ数列とルーカス数列を使った証明

    フィボナッチ数列とルーカス数列(リュカ数列)使った証明です。 L(n)をルーカス数列のn番目の数字、F(n)をフィボナッチ数列のn番目の数字として、 L(0) = 2, L(1) = 1 F(0) = 0, F(1) = 1 の場合、 L(n) = F(n-1) + F(n+1) になることを証明しようと思ってます。 ビネの公式を使って証明しようと思ったんですが、うまく行きませんでした。それに、もっと簡単な方法があると思うんですが、どなたかわかりませんか?

専門家に質問してみよう