了解此递归方法的工作原理

Understanding how this recursive method works

谁能解释一下这个方法是如何工作的? 我尝试添加 System.out.print 语句,但它并没有让我到达任何地方并且 我现在似乎无法理解它。

public static double recursive(double x, double y, int n) {

    if(n==0) {
        return x;
    }

    return recursive(x, y, n-1) * (1+y);
}

编辑:我意识到我从错误的角度看待这个方法(不知道这是怎么发生的,但确实发生了),在恐慌的时刻,我决定征求群众的智慧。

对此的解释非常清晰简洁,一般来说也是关于递归的,这就是为什么我想保持 post 而不是删除我的愚蠢时刻。

该方法将 x 乘以 1 + y n 次。换句话说,该方法将 return x*(1+y)^n 最后。这是原定的n > 0。如果n原本小于0,则该方法会无限递归。

说明:当方法“进入”递归并调用自身时,它将执行 n 次,因为我们将 n 减 1 直到 n 等于 0。当n最终到达0,递归的最内层调用会returnx。每次连续调用都会将前一次调用的输出乘以 1+y

这不是你算法的图片,但它可以帮助你理解递归调用的概念。

右侧是调用顺序(从上到下),左侧是 return 次(从下到上)。

方法使用 n-1 参数调用自身。

  1. 注意,您有一个 基本案例 ,即 n==0;

  2. 现在注意,当一个特定的方法开始执行时,在某个时候,它会调用它自己的另一个实例,但是更小的n;

  3. 这个调用你自己的模式每次都少一个n,直到你达到你的基本情况;

  4. 当调用堆栈达到 n==0 基本情况时,方法调用将开始展开:last 将 return,这将使 previous-to-last 到 return,依此类推,直到您第一次调用 returns 和方法 returns.

这种调用行为称为后进先出 (LIFO)。

由于无法发表评论,所以我尝试这样回答问题。

如果跟不上代码调试,请尝试手动调试。 假设我们有以下值:

| × |是 | n |
| 5 | 2 | 2 |

现在用这些值调用方法并在脑海中播放它。 由于在第一步中 n 不为 0,因此它将使用 n-1 再次调用该方法。只要 n 等于 0,就会重复此操作。对于每个嵌套调用,您需要将结果与 (y-1) 相乘。所以上面的值的方式是:

`>初始调用:递归(5, 2, 2) -> n != 0

Rec call 1-> recursive(5, 2, 1) * (3) -> n != 0

Rec call 2-> recursive(5, 2, 0) * (3) -> n == 0 return x -> return 5`

现在您需要倒退计算 53 = 15(Return rec Call 1 的值)。这个结果你需要重新计算所以我们有 15 3 = 45 作为初始方法的结果。

希望你能搞清楚方法的真正作用