1. 程式人生 > >斐波那契數列Python和Java

斐波那契數列Python和Java

Fibonacci sequence

斐波那契數列前30項

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229

遞迴不一定好用,有的場景中,遞迴會使得效率降低,數字大的話,遞迴會卡死,
斐波那契數列用遞迴效率很低,若要顯示前100項時候,明顯非遞迴很快實現,遞迴很慢,所以斟酌使用。

python

遞迴

程式碼

def ferb(n):
    #遞迴
    if n<=1:
        return n
    else:
        return(ferb(n-2)+ferb(n-1))
number=int(input("輸出前幾項:"))
if number <=0:
    print("請輸入正整數")
else:
    for i in range(1,number+1):
        print(ferb(i))

結果:

輸出前幾項:10
1
1
2
3
5
8
13
21
34
55
>>> 

非遞迴

程式碼

a = 0
b = 1
c = a+b
number = int(input ("輸出前幾項的值:"))
for i in range(1,number+1):
    print(c)
    c = a+b
    a,b=b,c
    

結果:
在這裡插入圖片描述

Java

遞迴

程式碼

import java.util.Scanner;

public class ferbonacci {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("輸出前幾項:");
        int number = scanner.nextInt();
        if (number<1){
            System.out.println("請輸入正整數");
        }
        else{
            for (int i = 1;i < number+1;i++){
                int result = ferb(i);
                System.out.println(result);
        }
        }

    }
    public static int ferb(int n){
        if (n <= 1) {
            return n;
        }
        else {
            return ferb(n-2)+ferb(n-1);
        }

    }
}

結果:
在這裡插入圖片描述
--------------------------------------------------
謝謝!