最近我一直在尋找遞歸形式的數字(用戶輸入,正整數)的斐波那契和,例如(輸出是): 9 = 8 + 1 14 = 13 + 1 30 = 21 + 8 + 1 等等。 到目前爲止,我已經做了遞歸函數來計算實際的斐波那契數(在9總和,如8和1),它看起來像這樣:斐波那契Sum in(Java)
static long[] f = new long[50];
static long fib(int n) {
if (n <= 1) { //base case
return 1;
}
if (n < f.length) {
if (f[n] != 0) {
return f[n];
}
return f[n] = fib(n - 1) + fib(n - 2);
}
return fib(n - 1) + fib(n - 2);
}
我分配給我這是一個暗示:
提示: 重新定理爲 n = fj +(n - fj) 這提示了一個遞歸解決方案。
,並用這一點,我已經目前想出這個:
static void fibSum(int n)
{
System.out.print(n + " = ");
for(int i = 0; i >= 0 ; i++)
{
if(n - (fib(i)) == 0)
{
System.out.println(fib(i));
}
else if(n < (fib(i)) && n > (fib(i-1)))
{
System.out.println(fib(i-1) + " + ");
}
}
}
我的輸出變爲儘可能[進入例如,9作爲用戶輸入]「9 = 8 +」,和與該對於所有正在閱讀這些內容的人(並且感謝你獲得這麼多!),我的問題是爲什麼我沒有得到分解總和中的最後一個數字(1),並且我的解決方案被認爲是recurisve,因爲它實際上並沒有遵循我在過去的例子中看到的格式,也沒有遵循我寫的fib()方法。我不知道如何實現通過這種格式打印加號。 這裏是我的參考主要方法:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Please enter an integer number: ");
int n = scan.nextInt();
fibSum(n);
我認爲由於fib函數的基礎case n <= 1,它處理諸如fib(-1)之類的情況並將其返回爲1?也許我錯了,目前正試圖通過你提到的事來嘗試找到並修復它們。 – Dan