問題
如今請求輸入一個整數n,請你輸出斐波那契數列的第n項。
遞歸操縱O(2^n)
function fibonacci(n) {
if(n < 1)
return 0;
if(n === 1 || n === 2)
return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
時候複雜度O(2^n)太高,而且用遞歸會發生許多反覆的操縱。
非遞歸操縱O(n)
function Fibonacci(n)
{
if(n < 1)
return 0;
if(n === 1 || n === 2)
return 1;
var s1 = 1;
var s2 = 1;
var res = 0;
for(var i = 3;i <= n;i++) {
res = s1 + s2;
s1 = s2;
s2 = res;
}
return res;
}
這類要領就是一次遍歷過去就行,盤算第n個數時,使用了s1、s2兩個變量存儲第n-1和第n-2個數,使時候複雜度降低到O(n)