我正在嘗試創建一個方法,該方法將根據用戶輸入生成斐波那契數列,並通過遞歸計算第10個數字。 (現在學習遞歸,這是一個練習)。遞歸生成Fibonocci
這裏是我試圖代碼,我目前正在努力使工作:
//being run with fibonacci(10, 10);
//Start being the number the sequence starts with
public static int fibonacci(int start, int times)
{
if(times > 0)
{
int result = fibonacci(start - 1, times - 1) + fibonacci(start - 2, times - 1);
sequence += result;
return result;
}
System.out.println(sequence);
return start;
}
然而,這會返回大量的(我想約40000號需要大約10秒完成運行)。而且所有的數字看起來都是負面的,絕對不是我的目標。
現在,我們來認識問題:我認爲問題在於,每調用一次該方法時,該方法都會自動調用兩次,從而導致大量增加。然而,我想不出一個解決這個問題的辦法,因爲我每次都試圖通過遞歸來實現,而我別無選擇,只能再次調用它。
至於爲什麼它是負面的,我沒有線索。我以爲我正確地使用了斐波納契方程,但顯然我做了不正確的事情。
任何人都可以幫助我解決這個問題嗎?
(的確如此,我可以很容易地在這裏搜索一些代碼,因爲我確定它已經存在了,但我想實際瞭解它是如何完成的以及我爲未來的參考做了什麼錯誤。比從複製的代碼中獲得分數還要高)
提示:爲什麼你需要時間和開始。在遞歸中,你遞歸直到你遇到一個你不需要的'基本情況' - 在斐波那契這些基本情況下將是0和1. – monkjack
爲什麼是負數?想想這個部分'斐波那契(開始 - 2,時間 - 1)'。如果'start = 10'和'times = 10'第一次調用是'fibonacci(8,9)',下一次調用是'fibonacci(6,8)'....最後是你的條件'times> 0'將會是'斐波那契(-6,2)'或者更確切地說是'斐波那契(-8,1)' –
玩得開心。當你有它的工作,時間爲前40個號碼,然後41,42,... 46的某處執行時間從大約10分鐘跳到足以耗盡我的耐心,這可能是幾個小時。 – EJP