簡體   English   中英

我不知道為什么此遞歸不起作用

[英]I can't figure out why this Recursion isn't working

我正在學習遞歸,但還沒有完全掌握。 所以在這里我試圖做一個遞歸作業,但是我被卡住了。

在本次作業中,我要求用戶輸入短語,然后程序確定它是否是回文。 我們應該使用遞歸來完成此任務。

這是遞歸的部分,我不太清楚如何解決它,因為當我運行它時,沒有任何錯誤,但總是出現錯誤。

我正在使用ArrayList保留所有用戶輸入。

這是我現在得到的代碼

//instance variables
private boolean det;
private String input;
private String inputHelp;

//constructor
public RecursivePalindrome(String i)
{
    det = false;
    input = i;
    inputHelp = "";
}

//determines if the method is a palindrome or not using recursions
public boolean palindrome(String b)
{

    if(inputHelp.length() == 0)
    {
        det = true;
    }
    if(inputHelp.substring( 0 , 1 ).equals(inputHelp.substring( inputHelp.length() )))
    {
        inputHelp = inputHelp.substring( 1, inputHelp.length());
        palindrome(inputHelp);
    }
    else 
    {
        det = false;
    }
    return det;
}

有三個錯誤。 首先,請注意substring文檔 :第二個參數是結束索引“排他”。 其次,您需要使用遞歸調用的結果。 最后(如ajb在評論中正確指出的那樣),您應該用奇數字母(第一個條件)說明回文:

if (inputHelp.length() <= 1)
{
    det = true;
}
else if (inputHelp.substring(0, 1)
             .equals(inputHelp.substring(inputHelp.length() - 1)))
{
    inputHelp = inputHelp.substring( 1, inputHelp.length() - 1);
    det = palindrome(inputHelp);
}
else 
{
    det = false;
}

此外,您可以使其更具可讀性:

public boolean palindrome(String b)
{
    if (b.length() <= 1)
    {
        return true;
    }

    if (b.substring(0, 1)
           .equals(b.substring(b.length() - 1)))
    {
        return palindrome(b.substring(1, b.length() - 1));
    }

    return false;
}

可以進行進一步的改進-行似乎仍然很長,尤其是第二種情況(留給讀者練習;)。

據我所知,您絕不inputHelp設置為空字符串以外的任何東西,並且傳遞給您的方法的字符串b不會在任何地方使用。

因此,該方法將永遠不會對其自身進行回調,即使這樣做了,傳入的值也不會用於任何事情,從而使遞歸無效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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