斐波那契數列(求fibonacci的第N項的值)

今天在公司實習,實在沒啥活是我能幹的,就想着寫一寫算法打發時間,正好看到了斐波那契數列,搞起。java

這是斐波那契數列的通項公式:
圖片描述算法

之前用遞歸寫過,今天看的時候書上說遞歸雖然簡單,但其實內部作了不少重複的計算,並且尾遞歸都是能夠用循環解決的。而用循環就能夠避免重複的計算。spa

import java.util.Scanner;

public class Jianzhi{

    public static void main (String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        n = fibonacci(n) ;
        System.out.println(n) ;
    }
    public static int fibonacci(int n ) {

        int f0 = 0;
        int f1 = 1;
        int fn = 0 ;
        if (n == 0) {
            return f0;
        }
        if (n == 1) {
            return f1;
        } else {
            for (int i = 2; i <= n; i++) {
                fn = f0 + f1;  //當前循環所得的斐波那契數等於前一個加上前前個
                f0 = f1 ;     //當前循環所得的斐波那契數的前一個數,做爲下次循環的前前個次數
                f1 = fn ;     //當前循環所得的斐波那契的數,做爲下次循環的前一個數
            }
            return fn;
        }
    }

}

斐波那契數列的變換:
好比,從前有一隻青蛙,它一次能夠跳一個臺階,也能夠一次跳兩個臺階,求一個N階的臺階他會用幾種跳法。code

那就是假設就1個臺階 那就只有1種跳法;若是有2個臺階,那就有2種;以此類推:遞歸

1    1
  2    2
  3    3
  4    5

完畢。圖片

相關文章
相關標籤/搜索