首页 > 解决方案 > 为什么这个递归方法返回 400 而不是 404?

问题描述

为什么该方法返回 400?值“x”从 5、15、45、135、405、404、403、402、401、400 开始。我不知道为什么。请解释。

public int go(int x) {
    if(x < 300)
        x = go(x * 3);
    return x - 1;
}

标签: javarecursion

解决方案


它将根据您最初调用它的方式返回不同的值。如果您最初使用 5 调用它,它将返回 400,因为一旦达到 135,您将深入递归函数的 4 层。

所以它确实返回 404 - 给调用者,调用者返回 403 给它的调用者,它返回 402 ......直到它到达 400,此时它在第一个调用者处,这是你正在打印的值。

这就是递归函数的工作原理。

go(go(go(go(go(405)))))如果不清楚,请尝试打印结果,因为当递归完成时,这就是您在示例中有效的结果。


推荐阅读