鱼C论坛

 找回密码
 立即注册
查看: 2528|回复: 1

[已解决]python函数学习疑问

[复制链接]
发表于 2023-2-23 11:49:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求大佬讲解下下面这个程序运行结果为啥是10?

def Foo(x):
    if (x==1):
        return 1
    else:
        return x+Foo(x-1)

print(Foo(4))
最佳答案
2023-2-23 11:57:59
这是一个递归函数,它计算了一个数的1到该数的累加和。

在这个程序中,Foo(4) 的调用会触发递归函数的运行。由于 x 不等于1,所以程序将执行 x+Foo(x-1) 这个语句。这意味着程序会将 x 与 Foo(x-1) 的返回值相加,其中 x-1 是递归调用时传递给函数的参数。

接下来,Foo(x-1) 将会递归地调用 Foo(x-2),Foo(x-3),直到 Foo(1),因为这是递归的基本情况,此时 Foo(1) 直接返回 1。

然后,递归返回回来,将每个递归调用的结果累加起来,直到 Foo(4) 完全返回,得到的结果是:

4 + Foo(3) = 4 + (3 + Foo(2)) = 4 + (3 + (2 + Foo(1))) = 4 + (3 + (2 + 1)) = 10

因此,Foo(4) 的结果是 10。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-23 11:57:59 | 显示全部楼层    本楼为最佳答案   
这是一个递归函数,它计算了一个数的1到该数的累加和。

在这个程序中,Foo(4) 的调用会触发递归函数的运行。由于 x 不等于1,所以程序将执行 x+Foo(x-1) 这个语句。这意味着程序会将 x 与 Foo(x-1) 的返回值相加,其中 x-1 是递归调用时传递给函数的参数。

接下来,Foo(x-1) 将会递归地调用 Foo(x-2),Foo(x-3),直到 Foo(1),因为这是递归的基本情况,此时 Foo(1) 直接返回 1。

然后,递归返回回来,将每个递归调用的结果累加起来,直到 Foo(4) 完全返回,得到的结果是:

4 + Foo(3) = 4 + (3 + Foo(2)) = 4 + (3 + (2 + Foo(1))) = 4 + (3 + (2 + 1)) = 10

因此,Foo(4) 的结果是 10。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 07:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表