問題描述:
大家都知道斐波那契數列,現在要求輸入乙個整數 n,請你輸出斐波那契數列的第 n 項(從 0 開始,第 0 項為 0)。(n<=39)
方法一:
function fibonacci(n)
var arr = [0, 1];
for (var i = 2; i <= n; i++)
return arr[n];
}
方法二:
function fibonacci(n)
let triple = [0, 0, 1];
for (let i = 2; i <= n; i++)
return triple[2];
}
方法三:遞迴(效率低,執行時間長)
function fibonacci(n)
return fibonacci(n - 1) + fibonacci(n - 2);
}
問題描述:
乙隻青蛙一次可以跳上 1 級台階,也可以跳上 2 級。求該青蛙跳上乙個 n 級的台階總共有多少種跳法(先後次序不同算不同的結果)。
解題思路:這題其實就是在求斐波那契數列。理解起來也很簡單。假設跳到 n 級台階有 f(n)種方法。根據題目,青蛙在跳上 n 級時有 2 種方法:
青蛙跳到 n- 1 級有 f(n-1)種方法,跳到 n- 2 級有 f(n-2)種方法。所以 f(n) = f(n - 1) + f(n - 2)。這就是斐波那契數列的定義式。
function jumpfloor(number)
var arr = [1, 2];
for (let i = 3; i <= number; i++)
return arr[arr.length - 1];
}
問題描述:
乙隻青蛙一次可以跳上 1 級台階,也可以跳上 2 級……它也可以跳上 n 級。求該青蛙跳上乙個 n 級的台階總共有多少種跳法。
解題思路:假設跳 n 級台階的跳法數量是 f(n)個。假設跳 n 級台階的跳法數量是 f(n)個。
那麼根據題意,青蛙可能從 n-1 級直接跳上來,也可能從 n-2 級直接跳上來,依次類推:f(n) = f(n - 1) + f(n - 2) + ... + f(1)
同理:f(n - 1) = f(n - 2) + f(n - 3) + ... + f(1)
f(n) = 2 * f(n - 1) = 4 * f(n - 2) = ... = 2 ^ (n - 1)f(1)
其中: f(1) = 1
function jumpfloorii(number)
問題描述:
我們可以用 21 的小矩形橫著或者豎著去覆蓋更大的矩形。請問用 n 個 21 的小矩形無重疊地覆蓋乙個 2*n 的大矩形,總共有多少種方法?
比如 n=3 時,2*3 的矩形塊有 3 種覆蓋方法:劍指offer 遞迴和迴圈
遞迴雖然比較簡潔,但他同時也有顯著的缺點。遞迴由於是函式呼叫自身,而函式呼叫是有時間和空間的消耗的,每一次函式呼叫都需要在記憶體棧中分配空間以儲存引數 返回位址及臨時變數,而且往棧裡壓入資料和彈出資料都需要時間。1 斐波那契數列 0,1,1,2,3,5,8,13 遞迴 缺陷 重複計算的太多 int ...
《劍指offer》 遞迴和迴圈
記錄一下牛客網上,劍指 offer 分割槽的考點為 遞迴和迴圈 的題,都很簡單,共 4 題 1 斐波那契數列 2 跳台階 3 跳台階 4 矩形覆蓋 1 斐波那契數列 int fibonacci int n return b 遞迴方式 很容易想到 但是ac不了,因為遞迴次數過多,棧溢位了 int fi...
劍指offer 迴圈遞迴
class solution return res 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。class solution return res 乙隻青蛙一次可以跳上1級台階,也可以跳上2級 它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法...