簡體   English   中英

(Java)遞歸函數:使用n-1和n + 1

[英](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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM