Python基础篇【第八篇】:剖析递归函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python基础篇【第八篇】:剖析递归函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2303字,纯文字阅读大概需要4分钟。
内容图文
递归函数
如果函数中包含了对其自身的调用,该函数就是递归函数!
先介绍一下斐波那契数列:斐波那契数列成为黄金分割数列,表现形式0、1、1、2、3、5、8、13、21、34、.......
可以看出前两个的数的和等于第三个数0 + 1 = 1,1 + 1 = 2 , 1 + 2 = 3 ......
通过斐波那契数列剖析递归函数:
1 # !/usr/bin/env python3 2 # 通过斐波那契数列详细剖析递归函数 3 # 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657 4 5 def f1(depth, a1, a2): 6 print("第%s次循环:"%depth,a1,a2) 7 8if depth == 3: 910return a1,a2 1112 a3 = a1 + a2 13 r = f1(depth +1, a2, a3) 14return r 1516 ret = f1(1,0,1) 17print(ret) 1819‘‘‘20代码分析: 21depth:为了明确分析每一步的操作和状态 22a1:从初始目的要得到斐波那契数 23a2:从斐波那契数列中可以看到前两个数的和等于第三个数 24程序开始从上往下依次执行: 25 1.看到函数时首先把整个函数放到内存中 26 2.执行到下一步看到带着实参(1,0,1)的函数名字(f1)赋值到了一个变量上(ret),执行函数 27 3.再继续执行的时候函数中的结果给输出出来 28 执行函数的流程: 2930 1.实参传入到放在内存的函数相对应的形参中去(depth = 1, a1 = 0, a2 = 1) 31 def f1(depth = 1, a1 = 0, a2 = 1): 3233 2.%s站位符,%depth此刻等于1, a1 = 0, a2 = 1 34 print("第%s次循环:"%depth,a1,a2) = 第1次循环: 0 1 3536 3.在此设置一个条件,只让它循环3次,然后返回循环3次的结果,并会把最后一次的返回值拿出来(先拿在手里) 37 if depth == 3: 38 return a1,a2 39 3次的结果:0 1 (第一次) 40 1 1 (第二次) 41 1 2 (第三次) 4243 4.赋值一个变量a3让其等于a1加a2的和,第一次时a1 = 0, a2 = 1 所以a3 = 1 44 a3 = a1 + a2 ===> 1 = 0 + 1 4546 5.当程序执行到这时看到一个变量r,变量的内容可以看到f1这个名字,这个是函数的名字,在这的意思就是调用其函数本身,这就是递归了! 47 f1(depth +1, a2, a3)这段代码的意思就是调用自身,把depth +1, a2, a3传入到函数本身的参数中去. 48 所以当前r = f1(depth +1, a2, a3) ===> r = f1(2, 1, 1) 49 得到这个r这个变量的值的时候往下执行看到‘return r‘,return返回值会把刚刚r变量刚刚得到的值当做函数的实参,重新传入到函数的形参中里. 50 这也是第二次循环开始的地方!所以第二次循环开始的方式就是: 5152 开始 第一次 5354 def f1(depth, a1, a2): def f1(1, 0, 1): 55 print("第%s次循环:"%depth,a1,a2) print("第%s次循环:"%depth,0,1) 56 if depth == 1: if depth == 1: #循环一次,满足条件 57 return a1,a2 return 0,1 #第一次返回的值 58 a3 = a1 + a2 1 = 0 + 1 59 r = f1(depth +1, a2, a3) r = f1(2, 1, 1) #第二次开始的地方 60 return r return r #把值返回到函数中 6162 ret = f1(1,0,1) ret = f1(1,0,1) 63 print(ret) print(ret) 6465 第二次 6667 def f1(2, 1, 1): 68 print("第%s次循环:"%depth,1,1) 69 if depth == 2: #第二次循,满足条件 70 return 1,1 #第二次返回的值 71 2 = 1 + 1 第N次... 72 r = f1(3, 1, 2) #第三次开始的地方 73 return r #把值传入到函数中 7475 ret = f1(1,0,1) 76 print(ret) 77‘‘‘
以上得到的结果:
1 /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/zk/PycharmProjects/old_boy/day07/递归函数.py 2 第1次循环: 0 1 3 第2次循环: 1 1 4 第3次循环: 1 2 5 (1, 2) 67 Process finished with exit code 0
原文:http://www.cnblogs.com/allan-king/p/5486888.html
内容总结
以上是互联网集市为您收集整理的Python基础篇【第八篇】:剖析递归函数全部内容,希望文章能够帮你解决Python基础篇【第八篇】:剖析递归函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。