【问题标题】:Trying to come up with solution using recursion尝试使用递归提出解决方案
【发布时间】:2016-05-24 03:00:47
【问题描述】:

我知道有多种方法可以判断一个单词是否是回文,比如使用 StringBuilder 的 reverse 函数,甚至 Collections 的 reverse 函数,但为了学习递归,我这样写。我什至让它迭代地工作。

我在嵌入的 else 语句中添加了 return true,但我真的不确定该怎么做,因为当我在调试模式下运行它时,它返回 false,然后再次调用 checkPalindrome,我不明白为什么,因为它应该返回并终止,不是吗?我真的很感激解释我做错了什么以及如何让它以这种方式工作。

public static boolean checkPalindrome(Deque deq) {
    if(deq.pollFirst() != deq.pollLast()) {
        return false;
    } else {
        if(deq.size() == 1 || deq.size() == 0) {
            return true;
        } else {
            checkPalindrome(deq);
            return true // TODO ?? figure out What to put here ??
        }
    }
}

【问题讨论】:

    标签: java recursion


    【解决方案1】:

    当你打电话给自己时,你没有返回任何东西。内部的 else 语句应该是这样的:

    else {
        return checkPalindrome(deq);
    }
    

    您在下面的 cmets 中有一个后续问题,让我想解释递归方法的工作原理,但本质上,它们都遵循以下伪代码:

    public boolean someMethod(T[] someArrayOrList) {
        // return true  -OR-
        // return false -OR-
        // call yourself and return whatever that call returns
    }
    

    无论如何,当您调用该方法时,它会返回 SOMETHING... 要么它会自己返回某些东西,要么它会返回任何其他调用自身将返回的东西。从某种意义上说,它是对所有响应进行“与”运算,但实际上 TRUE 只生成一次。

    【讨论】:

    • 跪倒在地并尖叫 noooo我担心这可能是答案……很困惑为什么?它是否在每个实例上进行 AND 处理?
    • 你有这个概念,在学习如何构建递归方法时你的失败是常见的。
    • 所以它按照你建议的方式工作,但是我非常困惑为什么它返回false,然后执行下一条语句或执行return true;,然后转到下一条语句,你能清楚吗这适合我吗?或者它只是获得以前的回报值?怎么知道结束?是说第一个实例,TRUE,下一个 TRUE,最后一个 FALSE,所以它说 return TRUE && TRUE && FALSE?
    • 哦,太好了,现在说得通了。谢谢你的解释。
    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 2021-04-08
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2021-11-03
    • 2018-12-30
    • 2018-11-30
    相关资源
    最近更新 更多