什么是古怪的4,6回复?还有如何计算这个递归?

时间:2018-04-20 16:53:30

标签: java recursion

    public static int wacky (int x , int y){
     if(x <= 1){
      return y;
    }
    else{
         return wacky(x - 1, y - 1) + y;
        }
    }

我进行了一段时间的测试,但我仍然不知道如何逐步进行递归,我记得这个问题是通过记忆我觉得测试认为你​​可能会这样计算...... public static = 4 + 6 + 1 + 4 + 4 - 1 + 6 - 1 + 6 但不是我的答案选择我意识到我做错了什么...... 我的老师不帮助我,甚至不关心我试图寻求帮助,但他不知道如何解释这个......

2 个答案:

答案 0 :(得分:0)

当您递归调用函数时,它们会将新函数添加到堆栈中,直到得到最终结果(return)。当它发生时,你返回堆栈返回返回。

执行示例:

第一轮wacky(4, 6)

  • 4 <= 1?不,所以请致电wacky(4 - 1, 6 - 1)

    第二轮wacky(3, 5)

    • 3 <= 1?不,所以请致电wacky(3 - 1, 5 - 1)

      第三轮wacky(2, 4)

      • 2 <= 1?不,所以请致电wacky(2 - 1, 4 - 1)

        第四轮wacky(1, 3)

        • 1 <= 1?是
        • return 3;
      • return 3 + 4;
    • return 3 + 4 + 5;
  • return 3 + 4 + 5 + 6;

答案 1 :(得分:0)

为什么不让Java告诉你发生了什么?插入一些print语句,以便在代码运行时查看值:

private static int indent = 1;
public static int wacky(int x , int y) {
    System.out.printf("%" + (indent++ * 2) + "swacky(%d, %d)%n", "", x, y);
    int result;
    if (x <= 1)
        result = y;
    else
        result = wacky(x - 1, y - 1) + y;
    System.out.printf("%" + (indent-- * 2) + "s-> %d%n", "", result);
    return result;
}

测试

wacky(4, 6);

输出

  wacky(4, 6)
    wacky(3, 5)
      wacky(2, 4)
        wacky(1, 3)
          -> 3
        -> 7
      -> 12
    -> 18