为什么此递归函数的结果为16?

时间:2018-11-02 13:18:25

标签: python recursion

我一直试图理解为什么会导致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)

2 个答案:

答案 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,然后将其加倍并返回,再加倍并再次返回。