为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2022-06-28 15:18:49
输出为 100,但我不明白为什么。有人可以逐步了解此代码的工作原理。def fun(n):    if (n > 100):        return n - 5    return fun(fun(n+11))print(fun(45)) 
查看完整描述

2 回答

?
FFIVE

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))


查看完整回答
反对 回复 2022-06-28
?
慕容3067478

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

由于您正在尝试双重递归,我想您已经熟悉递归了;如果没有,请先看看那里!


查看完整回答
反对 回复 2022-06-28
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信