斐波那契數列
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...