我最近給出一個項目如下:(Java)的遞歸函數:使用n-1和n + 1個
遞歸關係: X(N)= X(N + 1) - 2(正1)其中x(0)= 1和x(2)= 3 編寫一個程序,用戶輸入一個數字n,並輸出如上所示的x的第n個值。
到目前爲止,我有此方法(我是很新的,並用[到目前爲止]遞歸非常糟糕)
public class x
{
static int x(int n)
{
if(n <= 1)
{
return 1;
}
if(n == 2)
{
return 3;
}
else
{
return x(n+1) - 2*(x(n-1));
}
}
,並提示用戶爲n的輸入一個簡單的main方法,然後打印在上述方法的結果:
public static void main(String[]args)
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter a number: ");
int n = scanner.nextInt();
System.out.println(x(n));
}
從分配,我計算是x(1)= 1。[正在我給定x(0)= 1和x(2)= 3 ]:
x(n) = x(n+1) - 2(x(n-1))
x(1) = x(2) - 2(x(0))
x(1) = 3 - 2(1)
x(1) = 3 - 2
x(1) = 1
這給我帶來了在上面的靜態方法X表示我的基本情況,
if(n <= 1) // because 0 and 1 each return 1
{
return 1;
}
if(n == 2) // simply because 2 returns 3
{
return 3;
}
當我跑我有什麼,節目給我的錯誤:
Exception in thread "main" java.lang.StackOverflowError
at x.x(x.java:21)
Java Result: 1
線21是在x方法的else子句中返回語句:
return x(n+1) - 2*(x(n-1));
我不知道我可以改變它來修復它。我嘗試將它重新表示爲x(n + 1)-x(n-1)-x(n-1),但它仍然給我帶來相同的錯誤。我不知道基本情況是否無效,因此不允許函數正常運行,或者只是我所做的返回語句是錯誤的。 我也試着寫出來,就好像x(5)調用x(4)調用x(3)一樣,就像我的筆記所顯示的那樣,但是我得出的問題是關於在同一函數中有n + 1和n-1聲明,所以我認爲我只是以錯誤的方式去做。 對此的任何指導都非常感謝!
重複關係不終止。要麼任務/項目要求不正確(或者他們構成了一個技巧問題),或者您已經錯誤地閱讀和轉錄了它。 –