我一直试图理解为什么会导致16,所以我最多能弄清它变成10还是18,但我不知道它怎么可能是16?
我尝试通过在每个点打印输出来添加一些调试,但是结果从8跳到16。
def fun(n):
if (n==4):
return n
else:
return 2*fun(n+1)
print("Result", fun(2))
任何帮助,例如每次递归中的逐步进行,都将受到赞赏吗?
例如,我这样做:
def fun(n):
print ("Called with n = " + str(n))
if (n==4):
return n
else:
result = 2*fun(n+1)
print ("Immediate outcome: " + str(result))
return result
print("Result", fun(2))
这将导致:
以n = 2调用
以n = 3调用
以n = 4调用
立即结果:8
立即结果:16
('结果',16)
答案 0 :(得分:1)
这些是2、3和4的摘要定义:
fun(2) —> 2 * fun(3)
fun(3) —> 2 * fun(4)
fun(4) —> 4
所以
fun(2) = 2 * fun(3) = 2 * 2 * fun(4) = 2 * 2 * 4 = 2 * 8 = 16
答案 1 :(得分:0)
首先,它检查是否n = 4
;
如果不是,则返回2*fun(n+1) fun(n+1)
,然后返回fun(3)
,而不是4
。
然后它将再次返回2*fun(n+1)
。
最后是n == 4
,因此它返回4
,然后将其加倍并返回,再加倍并再次返回。