アイデアと実現のJAVA ----フィボナッチ数

定義:、1,1,2,3-:また黄金列としても知られている、例として紹介ウサギの数学者レオナルド・フィボナッチ再生するので、それはまた、ウサギのシリーズを知られているが、具体的に列の数を指し.......... 5,8,13,21,34 F(1)= 1、F(2)= 1、F(N-)= F(1-N-)F. +(2-N- )(N> = 3) すなわち最初の2桁の和に等しい数。

 

質問:フィボナッチ10の列が前に求めています。

 

実現

思考:再帰

 

分析

 F(1)= 1、F(2)= 1

 F(3)= F(1)+ F(2)= 2

 F(4)= F(3)+ F(2)= 3

F(5)= F(4)+ F(3)= 5

.........

F(N)= F(N-1)+ F(N-2)

 

プログラムコード

import java.util.Scanner;
class test01{
    public static void main(String[]args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数:");
            int m=scanner.nextInt();

       
        for(int n=1;n<=m;n++){
            System.out.println(fibo(n));
        }
    }
    
     public static int fibo (int n){
        if(n==1||n==2){                 //如果n为1或者为2则直接输出1
            return 1;
        }
        return fibo(n-1)+fibo(n-2);    //否则的话输出前一项和前前一项的和。
    }
}

出力:入力5

 

 

 

思考2​​:反復

 

分析

 

A = 1、B = 2、C = A + B = 2

第2項は1 =であるのでbは、に割り当てられている第4算出するステップと、cにBが割り当てられているが、これ第三項はB = 2であること;第したがって、C = A + B = 3です。単に後者IS、最初の2つの和に等しいことを意味します。

 

プログラムコード

import java.util.Scanner;
class test01{
    public static void main(String[]args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数:");
            int n=scanner.nextInt();
        fibolterator(n);
    }
     public static void fibolterator(int n){
        int a=1;
        int b=1;
        System.out.println(a);
        System.out.println(b);
        int count=2;              //从2开始算,如果count=输入的数就退出
        int c;
        while(true){
            c=a+b;
            System.out.println(c);
            count++;
            if(count==n){
                return;
            }
            a=b;
            b=c;
        }
    }
}

 

出力:入力6

 

 

 

最後に、私は言いたいです:反復法は、時間の複雑さのフィボナッチ列のn項を解くO(n)は、空間計算量はO(1)です。再帰的に比較すると、より多くの反復解法フィボナッチ問題を使用することをお勧めします再帰比べるとその唯一の欠点は、再帰的におそらく高い可読性ではありません。
 

フィボナッチは、この問題について話しました。

 

 

公開された11元の記事 ウォンの賞賛1 ビュー374

おすすめ

転載: blog.csdn.net/qq_45824565/article/details/104283065