求助,这个函数中return n*factroial(n-1) 返回的是什么呀
求助,这个函数中return n*factroial(n-1) 返回的是什么呀,是n*factroial(n-1)吗,返回的东西又给谁啊,return 1 返回的1又给谁用啊,想了好久想不通,希望帮忙解释清楚点谢谢
那实例举例子吧:
假设 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
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:30 编辑
你学习太冒进了。还没有该清楚函数返回值就来学习递归,当然会不明白啦
函数返回值返回的东西是给了调用的位置。例如你在第八行调用了factorial,然后调用函数发返回值就会返回到这里赋值给result。递归调用也是如此,在第五行递归调用factorial,那么调用的结果就会返回到这里并与n进行相乘运算
ps:下次请发代码,不要发截图,回答问题的人可没时间再敲一遍代码 sunrise085 发表于 2020-11-20 11:29
你学习太冒进了。还没有该清楚函数返回值就来学习递归,当然会不明白啦
函数返回值返回的东西是给了调用 ...
请问调用的结果是什么 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]