输出为 100 但我不明白为什么

输出为 100,但我不明白为什么。有人可以逐步了解此代码的工作原理。


def fun(n):

    if (n > 100):

        return n - 5

    return fun(fun(n+11))

print(fun(45)) 


拉风的咖菲猫
浏览 98回答 2
2回答

FFIVE

分解你的代码。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))

慕容3067478

正如一些评论中指出的那样,您最好的机会是写下纸上发生的事情:当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由于您正在尝试双重递归,我想您已经熟悉递归了;如果没有,请先看看那里!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java