我们的教授问我们Distinguish between simple and multiple recursion
,我不确定我是否理解它。
据我所知,多次递归是指一个方法在其生命周期中被调用多次(例如Fibonacci),但是一个简单的递归呢?是否只调用一次方法?如果是,你可以举个例子吗?
这是教授。题
答案 0 :(得分:3)
单调用递归 1 的经典示例是阶乘函数:
f(n) = n * (n-1) * (n-2) ... * 3 * 2 * 1
这将实现为伪代码:
def factorial (int n, assert n > 0):
if n == 1:
return 1
return n * factorial (n - 1) # one call
与天真的 2 Fibonacci发生器形成对比:
def fib (int n, assert n >= 0):
if n < 2:
return 1
return fib (n - 1) + fib (n - 2) # two calls
1 因此维基百科定义了这些术语,尽管使用的是single
而不是simple
,与multiple
相比更有意义:
单次递归和多次递归
仅包含单个自引用的递归称为单个递归,而包含多个自引用的递归称为多次递归。
单个递归的标准示例包括列表遍历,例如在线性搜索中,或计算阶乘函数,而多次递归的标准示例包括树遍历,例如在深度优先搜索中,或计算斐波那契序列。
2 不是确实一个很好的递归用例,因为每次调用都有大量的重复工作。在这种情况下,迭代解决方案要好得多(代码稍微长一些,但工作量最小化):
def fib (int n, assert n >= 0):
if n < 2:
return 1
n = n - 2
grandparent = 1
parent = 1
me = grandparent + parent
while n > 0:
n = n - 1
grandparent = parent
parent = me
me = grandparent + parent
return me