尾递归与非尾递归

时间:2019-10-02 15:45:34

标签: java recursion tail-recursion

我经历了以下定义的尾递归

如果递归调用是该函数完成的最后一件事,则称递归函数为尾递归,而无需保留先前状态的记录。

我也检查了this个答案。但是我仍然有一个查询:

public static void main(String[] args) {
    doit(3);
}

public static void doit(int n) {
    if (n < 1) {
        return;
    }
    doit(n-1);
    fact2(n);
    doit(n-1);
}

public static void fact2(int n) {
    System.out.println(n);
}

在上述递归调用中,我们可以将其称为尾递归还是非尾递归?或者我们可以将其拆分为代码,说事实2(n)之后的最后一行是尾递归,而事实2(n)之前的最后一行是非尾递归?

如果我将上述调用更改为

public static void doit(int n) {
    if (n < 1) {
        return;
    }
    doit(n-1);
    fact2(n);
    doit(n-1);
    fact2(n)
}

这将是尾递归的吗?

0 个答案:

没有答案