3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
在斐波那契數(shù)列中,每一項(xiàng)都是前兩項(xiàng)的總和。因此,您編寫了一個(gè)遞歸算法。
所以,
fibonacci(5) = fibonacci(4) + fibonacci(3)
fibonacci(3) = fibonacci(2) + fibonacci(1)
fibonacci(4) = fibonacci(3) + fibonacci(2)
fibonacci(2) = fibonacci(1) + fibonacci(0)
現(xiàn)在您已經(jīng)知道了fibonacci(1)==1 and fibonacci(0) == 0。因此,您可以隨后計(jì)算其他值。
現(xiàn)在,
fibonacci(2) = 1+0 = 1
fibonacci(3) = 1+1 = 2
fibonacci(4) = 2+1 = 3
fibonacci(5) = 3+2 = 5
從斐波那契數(shù)列中0,1,1,2,3,5,8,13,21....我們可以看到5th element斐波那契數(shù)列返回了5。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊
您的代碼有2個(gè)問(wèn)題:
結(jié)果存儲(chǔ)在只能處理前48個(gè)斐波那契數(shù)字的int中,此后整數(shù)填充減位,結(jié)果是錯(cuò)誤的。
但是您永遠(yuǎn)無(wú)法運(yùn)行fibonacci(50)。
該代碼
fibonacci(n - 1) + fibonacci(n - 2)
是非常錯(cuò)誤的。
問(wèn)題是它調(diào)用斐波那契的次數(shù)不是50次,而是更多次。
首先,它 每次調(diào)用fibonacci(n)越差,就稱為fibonacci(49)+ fibonacci(48),
其次稱為fibonacci(48)+ fibonacci(47)和fibonacci(47)+ fibonacci(46)
,因此復(fù)雜度是指數(shù)級(jí)的。
非遞歸代碼的方法:
double fibbonaci(int n){
double prev=0d, next=1d, result=0d;
for (int i = 0; i < n; i++) {
result=prev+next;
prev=next;
next=result;
}
return result;
}

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
在偽代碼中,其中n = 5,將發(fā)生以下情況:
斐波那契(4)+斐波那契(3)
這可分為:
(fibonacci(3)+ fibonnacci(2))+(fibonacci(2)+ fibonnacci(1))
這可分為:
(((fibonacci(2)+ fibonnacci(1))+(((fibonacci(1)+ fibonnacci(0)))+((((fibonacci(1)+ fibonnacci(0))+ 1)))
這可分為:
((((fibonacci(1)+ fibonnacci(0))+1)+((1 + 0))+((1 + 0)+1)))
這可分為:
(((((1 + 0)+1)+((1 + 0))+((1 + 0)+1)))
結(jié)果是:5
給定fibonnacci序列為1 1 2 3 5 8 ...,第5個(gè)元素為5。您可以使用相同的方法來(lái)計(jì)算其他迭代。
添加回答
舉報(bào)