析因方法 - 递归还是迭代?(JAVA)

Blu*_*ire 5 java iteration recursion

我正在通过项目Euler,我遇到了一个组合问题.组合逻辑意味着计算阶乘.所以,我决定创建一个阶乘方法.然后我遇到了一个问题 - 因为我可以很容易地使用迭代和递归来做到这一点,我应该去哪一个?我快速写了2个方法 - 迭代:

public static long factorial(int num) {
        long result = 1;
        if(num == 0) {
            return 1;
        }
        else {
            for(int i = 2; i <= num; i++) {
                result *= i;
            }
            return result;
        }
Run Code Online (Sandbox Code Playgroud)

和递归:

public static long factorial(int num) {
        if(num == 0) {
            return 1;
        }
        else {
            return num * factorial(num - 1);
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我(显然)在这里谈论速度和功能,我应该使用哪一个?而且,一般来说,这种技术通常比其他技术更好(所以如果我以后遇到这个选择,我该怎么做)?

duf*_*ymo 12

两者都是绝望的天真.没有认真应用factorial会使用任何一个.我认为无论是低效的大型N,既不int也不long时的说法是大就足够了.

更好的方法是使用良好的gamma函数实现和memoization.

这是 Robert Sedgewick的实现.

较大的值将需要对数.

  • 我会恭敬地不同意. (2认同)