为什么这种递归方法被认为是一个因子?

时间:2017-01-03 09:39:53

标签: java recursion

我了解此方法在m=1n=1之前所做的一切。当if()m=1出现问题时n=1之后会发生什么。

public class exc {

    public static void main(String[] args) {
        System.out.println(prod(1, 4));
    }

    public static int prod(int m, int n) {

        if (m == n) {
            return n;

        } else {
            int recurse = prod(m, n - 1);                       

            int result = n * recurse;       // how n gets its value here?
            return result;

        }
    }
}
  1. 递归的价值是多少?我的意思是prod只产生一个 整数? (因为它有两个整数)

  2. 如果,当m = 1且n = 1时,返回值为1,那么为什么程序不会在那里终止?相反,它会在&#34之后终止;返回结果;"在其他地方?

  3. 在m = 1且n = 1之后,n为2(递归);如何将n设置为2?是因为2还在记忆中并且必须处理吗?

  4. 我查看了this page

    我也在不同的线后使用println查看输出,但这也没有帮助。我还使用了调试器。

1 个答案:

答案 0 :(得分:1)

当m = 1时,程序返回阶乘。 举个例子:(m = 1,n = 4)

4 != 1 -> so you call recursively prod(1, 3) 
    3 != 1 -> so you call recursively prod(1, 2)
        2 != 1 -> so you call recursively prod(1, 1)
            1 == 1 -> you return 1 to the last call
        In this call, recurse = 1 and n = 2 so you return 2 to the upper call
    Here, recurse = 2, n = 3, so you return 6 to the upper call
Here, recurse = 6, n = 4, so you return 24 to the upper call

END OF FUNCTION, result is 24 which is 4!

每次以递归方式调用函数prod时,暂停当前函数prodA(将其变量的值保存在内存中)以执行新函数prodB,直到prodB将某些内容返回到prodA。然后A继续执行自身(从内存加载其值)