[英](Java) Recursive Functions: using n-1 and n+1
我最近得到了一個如下項目:
遞歸關系:x(n)= x(n + 1) - 2x(n-1)其中x(0)= 1且x(2)= 3寫一個程序,用戶輸入一個數字,n和n x的值,如上所示輸出。
到目前為止,我已經制作了這個方法(我很新,並且[到目前為止]遞歸真的很糟糕)
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,然后打印上述方法的結果:
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語句:
return x(n+1) - 2*(x(n-1));
我不知道我可以改變什么來解決它。 我已經嘗試將其重新設置為x(n + 1)-x(n-1)-x(n-1),但它繼續給我相同的錯誤。 我不知道它是否是無效的基本情況,因此不允許函數正確地運行它,或者只是我所做的return語句是錯誤的。 我也嘗試寫出來,就像x(5)調用x(4)調用x(3)一樣,正如我的筆記所示,但是我遇到了關於在同一個函數語句中有n + 1和n-1的問題所以我想我只是走錯路。 對此有任何指導非常感謝!
問題是因為它永遠不會結束循環.... x(n)= x(n + 1) - 2x(n-1)
你正在遞增n,即for
x(0)= 1
x(1)= x(2) - 2 x(0)
x(3)= x(4) - 2 x(2)....
它一直在繼續,因為x(n + 1)沒有上限....
請檢查您是否錯過了遞歸將終止的邊界條件。
遞歸關系定義為前述術語的函數。 所以你必須重新定義你的遞歸關系,因為
x(n) = x(n+1) - 2x(n-1)
x(n+1) = x(n) + 2x(n-1)
x(n) = x(n - 1) + 2x(n-2)
使用上面的等式來實現具有基本情況x(0) = x(1) = 1, x(2) = 3
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.