面試題的那些事(2) 斐波那契數列

2021-07-12 04:30:39 字數 2460 閱讀 3974

斐波那契數列

1、寫乙個函式,輸入n,求斐波那契數列的第n項。斐波納挈數列的定義如下:

解法一:使用遞迴解決

long long recurfibonacci(unsigned int n)

if (n == 1)

return recurfibonacci(n - 1) + recurfibonacci(n - 2);

}

分析:思路簡單理解,但是效率很低,面試官不一定會喜歡。因為在進行遞迴時,會重複的計算。

解法二:非遞迴的解法(面試官期待的解法)

long long fibonacci(unsigned int n)

; if (n 

long long fibone = 0;//保留fibonacci(n-2)

long long fibtwo = 1;//保留fibonacci(n-1)

long long fibn = 0;//第n個fibonacci序列的結果

for (unsigned int i = 2; i <= n; i++)

return fibn;

}

分析:程式的可讀性雖然比較差,但是其效率很高。

測試**:

2、跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法

。解法分析:

最簡單的情況:

如果只有1級台階,那麼顯然只有一種跳法。如果有2級台階,那麼則會有2種跳法:一種是分兩次跳,每次跳1階;另外一種則是一次跳2級。

一般情況:

當n大於2時,第一次跳的時候有兩種選擇:一種是第一次只跳1階,此時的跳法就是f(n-1),另外一種跳法就是第一次跳2階,然後此時的跳法就是f(n-2)。所以總的次數就是f(n)=f(n-1)+f(n-2);很明顯此時是乙個斐波那契數列。

long long jumpfloor( unsigned int number) 

; if (number 

long long jumpone = 1;

long long jumptwo = 1;

long long jumpn = 0;

//n>2時為斐波那契數列

//跳一階則方法為jumpfloor(n-1)

//跳兩階則方法為jumpfloor(n-2)

for (unsigned int i = 2; i <= number; i++)

return jumpn;

}

3、**跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

解法分析:

使用數學歸納法:

1)當n為1的時候,只有1種跳法

2)當n為2的時候,可以有(1,1)和(2)共2種跳法

3)當n為3的時候,可以有(1,1,1)、(1,2)、(2,1)、(3)共4種跳法

4)當n為4的時候,可以有(1,1,1,1)、(1、2、1)、(1、3)、(1、1、2)、(2,1,1)、(2,2)、(3,1)、(4)共8種跳法

由數學歸納法得f(n)=2的(n-1)次方。

long long jumpfloorii(unsigned int number) 

return pow(2, number - 1);

}

4、矩形覆蓋

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

解法分析:

假設當n為1的時候,只有1種覆蓋方法

當n>2時,覆蓋大矩形的最左邊時有2種覆蓋方法:當豎著放的時候右邊還剩下2*(n-1)個區域,此時的覆蓋方法為f(n-1);當橫著放的時候,那麼最左下角也必須橫著放,那麼右邊還剩下2*(n-2)個矩形,此時的方法為f(n-2);總的方法為f(n)=f(n-1)+f(n-2),又是斐波納挈數列。

long long rectcover(unsigned int number) 

long long stepone = 0;

long long steptwo = 1;

long long step = 0;

for (unsigned int i = 1; i <= number; i++)

return step;

}

面試題9 斐波那契數列

方法一 很容易想到的解法是直接使用遞迴。c include stdafx.h include using namespace std long long fibonacci unsigned int n if n 1 return fibonacci n 1 fibonacci n 2 int tm...

面試題9 斐波那契數列

題目一 寫乙個函式,輸入n,求斐波那契數列的第n項,斐波那契數列的定義如下 0 n 0 f n 1 n 1 f n 1 f n 2 n 1 遞迴 long long fibonacci unsigned int n if n 0 n 1 return n return fibonacci n 1 f...

面試題9 斐波那契數列

面試題9 題目 寫乙個函式,輸入n,求斐波那契數列的第n項。很多教科書中的解法 long long fibonacci solution1 unsigned int n 這是從第n項向前計算的方法,很多計算量實際上是重複的。long long fibonacci solution2 unsigned...