单个语句中的多个递归

巴拉特·拉维库玛(Barath ravikumar)

我有一个问题问,执行以下代码时,打印了“ 1”多少次:

#!/usr/local/bin/python2.7


def rec(n):
    count = 1
    if n > 0:
        count += rec(n - 1) + rec(n - 1)
    print '1'
    return count        

rec(5)

答案= 63

当试图解决上面显示的上述问题时,我对某些递归概念感到困惑。

1>如何在单个语句中使用多个递归调用解决问题。在问题中,递归以什么顺序进行,同时发生还是一个接一个发生。

2>我(在C语言中)了解到,递归函数中必须始终存在一个条件,该条件决定了递归的次数,但我找不到这种条件,所以我如何找出级别的数量。

莱拉丹

让我们逐级查看它:

rec(5) - you call once, print 1 once
rec(4) - you call twice ONE AFTER ANOTHER (not in parallel). Print 1 twice.
rec(3) - you call 4 times (called twice from the two rec(4)-s), print 1 four times.
rec(2) - call 8 times, print 1 eight times
rec(1) - call 16 times, print 1 sixteen times.
rec(0) - call 32 times, print 1 32 times, but no further recursion called because n==0

32 + 16 + 8 + 4 + 2 + 1 = 63

与递归一样,执行从下往上执行,因此您的rec(0)将首先打​​印:

打印的:

rec(0) - 32
rec(1) - 16
rec(2) - 8
rec(3) - 4
rec(4) - 2
rec(5) - 1

如您所见,您可以轻松地将任何n的情况概括为级数之和。基本上,此两次调用递归与简单递归没有什么不同,除了您不调用级别一次,而是调用2 ^ n次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章