python函数应用请大神帮我看代码问题,python大神,问这个问题的原因是做co
python函数应用请大神帮我看代码问题,python大神,问这个问题的原因是做co
问这个问题的原因是做codecademy的一道题,要求建一个阶乘的函数,所以我是这样建立的:
def factorial(x): if x == 0 or x==1: return 1 else: x=int(x) b=1 while x>1: b=x*b x=x-1 return b
但是我在论坛上面找到了一段简洁的多的代码:
def factorial(x): if x==0: return 1 return x * factorial(x-1)
第二个代码是怎么工作的呢,难道 他是把前面的依次算一次,直到1?
你要知道每次函数的调用,在其底层都是一次push操作,函数调用完后就返回是一次pop操作。以刚才的print factorial(4)调用为例子,一步一步分析:
第一步:执行factorial(4),push一下
4 * ??
第二步:执行factorial(4-1),push一下
3 * ??
4 * ??
第三步:执行factorial(3-1),push一下
2 * ??
3 * ??
4 * ??
第四步:执行factorial(2-1),push一下
1 * ??
2 * ??
3 * ??
4 * ??
第五步:执行factorial(1-1),push一下,这个时候x == 0:return 1
1 * 1
2 * ??
3 * ??
4 * ??
到了这里,函数到了return 1返回出口,表示该递归函数的最后一次调用完成了,本次调用应该返回了。
第六步:pop factorial(1-1),返回1
2 * 1
3 * ??
4 * ??
第七步:pop factorial(2-1),返回2
3 * 2
4 * ??
第八步:pop factorial(3-1),返回6
4 * 6
第九步:pop factorial(4-1),返回24
整个递归函数执行完毕,得到结果24。
第二个代码叫递归,你的那个叫循环
编橙之家文章,
相关内容
- Django外键objects.get究竟该怎么写,djangoobjects.get,model定义
- 爬虫状态码返回状态200,自己访问400,这是什么原因?,爬
- Python requests爬虫编码encoding error是什么问题,requestsen
- 适合Python应用的Vim缩进调试方法,pythonvim缩进调试,我的
- python list列表append方法的性能问题,pythonappend,作为客户
- Python有没有开源包处理GBK Unicode编码问题,pythonunicode
- 了解python flask.Response(generator())流内容处理的朋友请进,
- Ubuntu火狐浏览器可以用python脚本来控制吗?,ubuntupytho
- Python yield与斐波那契数列问题,pythonyield,def fib():
- Python函数无法运行源码有问题吗?,python源码,>>&g
评论关闭