关于递归的问题

时间:2014-03-03 21:28:07

标签: recursion

所以我有一些关于递归的问题。我在上课,我正在审阅我的笔记和文字,并且有点困惑:

1)我说得对吗?迭代器和递归看起来非常相似。

递归=一个引用自身的函数,它有一个基本案例来结束问题。

迭代器:使用++或 - 遍历所有数据以获取一条信息。

2)什么是递归下降?它是否越来越接近基础案例?什么是递归上升?

3)我们得到了这个递归样本,让我感到困惑:

Product of Positive Integer from 1 to n
Denoted by n! => n! = 1.2.3....(n-2).(n-1).n
0! = 1 , 5! = 1.2.3.4.5 = 120, 6! = 5! . 6 = 720
n! = n . ( n – 1 )!
Definition
– If n = 0 then n! = 1
– If n > 0, then n! = n. (n-1) !

为什么在(n-1)之后会出现惊叹号?这些点是什么,比如n。(n-1)?

3 个答案:

答案 0 :(得分:1)

递归和迭代不一样。你可以在没有递归的情况下迭代,递归意味着没有迭代。

让我们现在离开递归下降。这与parsers有关。

这个例子是采用阶乘的数学运算。感叹号的意思是“阶乘”。点表示乘法。

记住?

0! = 1
1! = 1
2! = 2*1
3! = 3*2*1 = 3*2!
4! = 4*3*2*1 = 4*3!

等等。

这是一个典型的问题,用于说明第一次看到本科生的递归:

function factorial_recursion(n) {
    if (n <= 1) {
        return 1;
    } else {
        return n*factorial(n-1);
    }
}

通过迭代,你可以在没有递归的情况下编写相同的东西:

function factorial_iter(n) {
    var value = 1;
    if (n > 1) {
        for (i = 1; i <= n; ++i) {
            value *= i;
        }
    }
    return value;
}

答案 1 :(得分:0)

好点是倍增。使用点令人困惑,但我们知道5! = 1*2*3*4*5所以点必须是乘法。此外,!是表示阶乘的符号。 5! = 5 * 4!

答案 2 :(得分:0)

  1. 是的,迭代和递归在某种程度上相似,并且known任何递归解决方案都有一个等效的迭代解决方案,反之亦然。然而,许多问题在这些方法之一而不是在另一方面中更容易解决。在两种方法中,因子示例都很容易解决。 每当您看到如何将问题减少到较小幅度的同一问题的一个或多个事件时,您可以轻松地继续进行递归解决方案。

  2. 我认为递归下降会进入更深层次的递归,而上升是相反的:从通话中返回并接近顶级电话。

  3. 这些点代表乘法。