面試題9計算斐波納切第n個數

2021-08-21 03:56:43 字數 2732 閱讀 7093

/**

* 計算斐波納切數列的第n個值

* @author chibozhou**/

public

class

fibonacci

//n==0

else

if(n==

0)return

0;

//n==1

else

if(n==

1)return

1;

//n>1

else

return fibonacci(n-

1) + fibonacci(n-

2);}

/*** 上述遞迴的**雖然簡單,但所需的記憶體空間很大,

* 而且在遞迴的過程中,有很多計算是重複的,比如:

* fibonacci(6)=fibonacci(5)+fibonacci(4)

* fibonacci(5)=fibonacci(4)+fibonacci(3)

* fibonacci(4)=fibonacci(3)+fibonacci(2)

* 由此可見:fibonacci(4)、fibonacci(3)均被重複計算,

* 因此遞迴的方法在時間和空間上的開銷都很大!

* 是否有比遞迴更好的辦法來實現斐波納切?

*//**

* 遞迴之所以開銷巨大,是因為它是乙個自頂向下的計算過程,

* 要計算fibonacci(n),就需要先計算fibonacci(n-1)和fibonacci(n-2),

* 而在fibonacci(0)被計算出之前,之前所有的函式都處於在記憶體中等待的狀態,都占用著記憶體空間;

* 因此,如果我們採用自底向上的方式,每完成乙個fibonacci函式,就記錄下該值,並釋放其記憶體空間,

* 就能節約記憶體空間。

* 此外,由於fibonacci(n)是由前兩個數相加得到的,

* 因此只要將每次計算結果和前乙個數記錄下來,就能計算出之後值,從而避免了重複計算。

* @param n 斐波納切數列長度

* @return 第n個元素值

*/public

static

intfibonacci_recursion

(int n)

if(n==

0 || n==

1)return n;

//a1用於儲存fibonacci(n-2),a2用於儲存fibonacci(n-1),a3用於儲存fibonacci(n)

int a1=

0,a2=

1,a3=

1;for(

int i=

0;i1;i++)

return a3;}}

/**

* 計算斐波納切數列的第n個值

* @author chibozhou**/

public

class

fibonacci

//n==0

else

if(n==

0)return

0;

//n==1

else

if(n==

1)return

1;

//n>1

else

return fibonacci(n-

1) + fibonacci(n-

2);}

/*** 上述遞迴的**雖然簡單,但所需的記憶體空間很大,

* 而且在遞迴的過程中,有很多計算是重複的,比如:

* fibonacci(6)=fibonacci(5)+fibonacci(4)

* fibonacci(5)=fibonacci(4)+fibonacci(3)

* fibonacci(4)=fibonacci(3)+fibonacci(2)

* 由此可見:fibonacci(4)、fibonacci(3)均被重複計算,

* 因此遞迴的方法在時間和空間上的開銷都很大!

* 是否有比遞迴更好的辦法來實現斐波納切?

*//**

* 遞迴之所以開銷巨大,是因為它是乙個自頂向下的計算過程,

* 要計算fibonacci(n),就需要先計算fibonacci(n-1)和fibonacci(n-2),

* 而在fibonacci(0)被計算出之前,之前所有的函式都處於在記憶體中等待的狀態,都占用著記憶體空間;

* 因此,如果我們採用自底向上的方式,每完成乙個fibonacci函式,就記錄下該值,並釋放其記憶體空間,

* 就能節約記憶體空間。

* 此外,由於fibonacci(n)是由前兩個數相加得到的,

* 因此只要將每次計算結果和前乙個數記錄下來,就能計算出之後值,從而避免了重複計算。

* @param n 斐波納切數列長度

* @return 第n個元素值

*/public

static

intfibonacci_recursion

(int n)

if(n==

0 || n==

1)return n;

//a1用於儲存fibonacci(n-2),a2用於儲存fibonacci(n-1),a3用於儲存fibonacci(n)

int a1=

0,a2=

1,a3=

1;for(

int i=

0;i1;i++)

return a3;}}

查詢斐波納契數列中第N個數

所謂的斐波納契數列是指 前2個數是 0 和 1 第 i 個數是第 i 1 個數和第i 2 個數的和。斐波納契數列的前10個數字是 0,1,1,2,3,5,8,13,21,34 給定 1,返回 0 給定 2,返回 1 給定 10,返回 34 非遞迴方式的 本題是斐波拉契數列的變種,斐波拉契數列常用的解...

查詢斐波納契數列中第 N 個數

所謂的斐波納契數列是指 前兩個數是0和1,第i個數是第i 1個數和第i 2個數的和。eg 斐波納契數列的錢10 個數是指 一般求解斐波納契數列的第n個數的值可以用簡單的遞迴來做,如下 public class solution static int fibonacci int n 遞迴的時間複雜度往...

查詢斐波納契數列中第 N 個數

目錄查詢斐波納契數列中第 n 個數所謂的斐波納契數列是指 前2個數是 0 和 1 第 i 個數是第 i 1 個數和第i 2 個數的和。斐波納契數列的前10個數字是 0,1,1,2,3,5,8,13,21,34 樣例 1 輸入 1 輸出 0 樣例解釋 返回斐波那契的第乙個數字,是0.樣例 2 輸入 2...