我有一个问题问,执行以下代码时,打印了“ 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] 删除。
我来说两句