2 回答
TA贡献1797条经验 获得超6个赞
分解你的代码。
def fun(n):
if (n > 100):
return n - 5
return fun(fun(n+11))
print(fun(45))
> n =45, n > 100 == False, return fun(fun(n + 11))
> fun(45+11) == fun(56), n = 56, 56 > 11 == False, return fun(fun(n + 11))
> fun(56+11), n = 67
> fun(67+11), n = 78
> fun(78+11), n = 89
> fun(89 + 11), n= 100
> fun(100+11), n = 111
> fun(111), n > 100 return 111 - 5
> fun(106), return 106 - 5
> fun(101), return 101 - 5
> fun(96), return fun(fun(96+11))
> fun(107), return 107 - 5
> fun(102), return 102 - 5
> fun(97), return fun(fun(97+11))
> 108 - 5
> 103 - 5
> fun(98)
> 109 - 5
> 104 - 5
> fun(99)
> 110 - 5
> 105 - 5, return 100
这里有代码:
def fun(n, s):
space = " " * s
if (n > 100):
print(f"{space} > return {n}-5={n-5}")
return [n - 5, s - 3]
print(f"{space} > return fun(fun({n} + 11))\n {space + ' '} > return fun(fun({n+11}))")
return fun(*fun(n+11, s+3))
print(fun(45, 0))
TA贡献1773条经验 获得超3个赞
正如一些评论中指出的那样,您最好的机会是写下纸上发生的事情:
当n低于 100 时,您将 11 添加到n,并更深。
当n高于 100 时,您返回n-5,并走得更高。
如果你想在纸上表现出来,你可以每加11就往下,每减5就回来。超过你的起点,你就会有你的结果,上升。
START 100
| ^
V |
45 99 99 105
56 98 98 104 110 110
67 97 97 103 109 109
78 96 96 102 108 108
89 101 107 107
100 106
111 111
由于您正在尝试双重递归,我想您已经熟悉递归了;如果没有,请先看看那里!
添加回答
举报