【问题标题】:Program returns 0 but only to "one up" in recursion, but I want it to go to the "very top"? Is this possible?程序返回 0 但只返回“一个向上”递归,但我希望它转到“非常顶部”?这可能吗?
【发布时间】:2019-03-15 01:27:46
【问题描述】:

我是使用递归的新手,我正在尝试让我的回文程序正常工作。这就是我想要做的:如果一个字符不相等,我返回 0。如果不是,我在增加 i 并减少 j 的同时继续递归。如果 i 不再小于 j,我想说递归完成,所以我想返回这个词是回文(=1)。

但是当我输入一个不是回文的单词时,我正确地返回了一个 0。(我在调试时可以看到这个)。但是 - 最后,它也返回一个 1。我认为这与递归意味着程序继续运行的事实有关,并且 0 被返回到我以前做过的事情。但是-我希望 0 到最顶端。

有没有办法解决这个问题?还是我做错了什么?对不起,如果这真的很基本。 提前致谢。这是我的代码:

public static int checkIfPalindrome(String s, int i, int j) {

    if (i<j) {

        if (s.charAt(i) == s.charAt(j)) {
            checkIfPalindrome(s, i+1, j-1);

        }
        else {
            return 0; 
        }
    }
    return 1;

}

【问题讨论】:

  • 您缺少递归调用的 return 语句,因此您有效地丢弃了更深层次的递归结果并默认返回 1。
  • 嗯,有道理,非常感谢!

标签: recursion palindrome


【解决方案1】:

一旦你知道你的指针没有碰撞,并且它们指向的字符相同,那么this方法的返回值就是递归调用的返回值。我已在下面修复了您的代码以执行此操作,但我也以不同的方式对其进行了重新组织,因为还有其他方法可以解决该问题:

public static int checkIfPalindrome(String s, int i, int j) {

    if (i >= j) {
        return 1;
    }

    if (s.charAt(i) != s.charAt(j)) {
        return 0;
    }

    return checkIfPalindrome(s, i + 1, j - 1);
}

【讨论】:

    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2021-05-15
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    相关资源
    最近更新 更多