今天記錄一波面試盈简。雖然被虐但是很爽碘裕。why? because I will get knowledge~(還是太菜)
什么是斐波那契數(shù)列携取,1,1,2,3,5,8,13...
這樣一個數(shù)列就是斐波那契數(shù)列,求第n項的值帮孔。
分析
從上文的數(shù)據(jù)中可以看出雷滋。我們所有的值都是前2項相加而來。所以我們要得到值的方式是 這樣的f(n) = f(n-1) +f(n-2)
這樣就很清晰了文兢。 上手寫吧~
大白話:使用遞歸-不斷去得到前2個的值-最終返回一堆 1 晤斩、 0 相加 即可得到我們輸入n所對應(yīng)的value
//tips:寫的時候我們需要初始化好我們考試的數(shù)據(jù)。因為我們開始數(shù)據(jù)是 1 1
function f1(n) {
if(n < 1) {
return 0;
}else if(n == 1 || n == 2) {
return 1;
}
return f1(n-1) + f1(n-2);
方法二實現(xiàn)
上面方法我們是使用遞歸的思路姆坚。當(dāng)然我們還可以使用循環(huán)得到我輸入n前2個的數(shù)字 相加即可這是不是暴力解法呢?
大白話:我們需要使用到1個變量temp 在循環(huán)中用來存儲當(dāng)前的res值-每次計算都需要額外去更新pre的值(可以理解為前一個值) res 只需要計算當(dāng)前自己和前1個的和
//tip: 我們依舊需要初始話好1 1 循環(huán)我們從第3個開始即可-不斷累加
function f2( n) {
if(n < 1) {
return 0;
}else if(n == 1 || n == 2) {
return 1;
}
let res = 1;
let pre = 1;
let temp = 0;
for(let i = 3; i <= n; i++) {
temp = res;
res = pre + res;
pre = temp;
}
return res;
}
感悟:被虐也是一種學(xué)習(xí)~