2 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
分解你的代碼。
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貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
正如一些評論中指出的那樣,您最好的機(jī)會(huì)是寫下紙上發(fā)生的事情:
當(dāng)n低于 100 時(shí),您將 11 添加到n,并更深。
當(dāng)n高于 100 時(shí),您返回n-5,并走得更高。
如果你想在紙上表現(xiàn)出來,你可以每加11就往下,每減5就回來。超過你的起點(diǎn),你就會(huì)有你的結(jié)果,上升。
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
由于您正在嘗試雙重遞歸,我想您已經(jīng)熟悉遞歸了;如果沒有,請先看看那里!
添加回答
舉報(bào)