zzh11 发表于 2020-11-20 11:19:21

求助,这个函数中return n*factroial(n-1) 返回的是什么呀


求助,这个函数中return n*factroial(n-1) 返回的是什么呀,是n*factroial(n-1)吗,返回的东西又给谁啊,return 1 返回的1又给谁用啊,想了好久想不通,希望帮忙解释清楚点谢谢

Twilight6 发表于 2020-11-20 11:27:31



那实例举例子吧:

假设 n = 3 调用 factroial(n) 函数后:

factroial(3) --> if n == 1: --> False --> else --> return 3*factroial(3-1)

进入第一次递归:

factroial(2) --> if n == 1: --> False --> else --> return 2*factroial(2-1)

进入第二次递归:

factroial(1) --> if n == 1: --> True--> return 1

递归结束,开始返回: 1*2*3 即 1 -->2*factroial(2-1) -->3*factroial(3-1)

1 返回给 factroial(2-1) ,然后 2*factroial(2-1) 相当于 2*1 返回给 factroial(3-1) 最后结果就为 3*2*1

jackz007 发表于 2020-11-20 11:29:03

factorial(5) = 5 * factorial(4)
             = 5 * 4 * factorial(3)
             = 5 * 4 * 3 * factorial(2)
             = 5 * 4 * 3 * 2 * factorial(1)
             = 5 * 4 * 3 * 2 * 1

sunrise085 发表于 2020-11-20 11:29:12

本帖最后由 sunrise085 于 2020-11-20 11:30 编辑

你学习太冒进了。还没有该清楚函数返回值就来学习递归,当然会不明白啦

函数返回值返回的东西是给了调用的位置。例如你在第八行调用了factorial,然后调用函数发返回值就会返回到这里赋值给result。递归调用也是如此,在第五行递归调用factorial,那么调用的结果就会返回到这里并与n进行相乘运算

ps:下次请发代码,不要发截图,回答问题的人可没时间再敲一遍代码

zzh11 发表于 2020-11-20 20:52:00

sunrise085 发表于 2020-11-20 11:29
你学习太冒进了。还没有该清楚函数返回值就来学习递归,当然会不明白啦

函数返回值返回的东西是给了调用 ...

请问调用的结果是什么

sunrise085 发表于 2020-11-20 21:38:12

zzh11 发表于 2020-11-20 20:52
请问调用的结果是什么

我感觉二楼三楼写的挺清楚的了啊。。没看懂?
那就在详细一点吧。编程更多还是要自己多思考啊

假设你输入的正整数是3,即number=3
那么执行 result =factorial(number),就会调用factorial,此时n=3,
第一次执行factorial,n=3,if判断,不满足条件,执行else后的语句,即return 3*factorial(3-1)
这时遇到函数调用,先去执行函数调用,即递归执行factorial(2)
      第二次执行factorial,n=2,if判断,不满足条件,执行else后的语句,即return 2*factorial(2-1)
      这时遇到函数调用,先去执行函数调用,即递归执行factorial(1)
            第三次执行factorial,n=1,if判断,满足条件,执行 return 1,函数返回 1,返回到上次调用的地方
            即返回到第三次调用的地方,继续执行 return 2*factorial(2-1),现在得到的是return 2*1,返回 2,返回到上次调用的地方
      即返回到第二次调用的地方,继续执行return 3*factorial(3-1),现在得到的是 return 3*2,返回6,返回上次调用的地方
即返回到第一次调用的地方,现在得到result=6
页: [1]
查看完整版本: 求助,这个函数中return n*factroial(n-1) 返回的是什么呀