什么是递归?用十进制转二进制的Python函数示例说明
先上用Python写的十进制转二进制的函数代码:
def Dec2Bin(dec):
result = '' if dec:
result = Dec2Bin(dec//2)
return result + str(dec%2)
else:
return result print(Dec2Bin(62))
图解此函数执行过程:
文字描述此函数的执行过程:
以十进制数10作为例子来解释递归问题。首先,进入函数Dec2Bin(10),此时参数dec=10,而result接受的是Dec2Bin(5)的返回值;于是,程序又进入了Dec2Bin(5)的函数体,注意,此时Dec2Bin(10)的函数程序还没有执行完,正在外层程序等待Dec2Bin(5)给它返回result的值呢。在Dec2Bin(5)的函数里,result的值又是Dec2Bin(2)的返回值;于是乎,程序又让Dec2Bin(5)等到起,转而进入Dec2Bin(2)的函数里。在Dec2Bin(2)的函数里,同样有个result的值,它是Dec2Bin(1)的返回值;程序暂停了Dec2Bin(2)继续往下执行,来到了Dec2Bin(1)函数体,然而,Dec2Bin(1)的result的值是Dec2Bin(0)的返回值;正在这时,程序说,Dec2Bin(dec)函数的参数dec为假的时候,执行else语句,即返回result,而此时result就是初始化时的空值,所以,Dec2Bin(0)返回空值给Dec2Bin(1),并被Dec2Bin(1)的result所接受。紧接着,Dec2Bin(1)继续执行没有完成的代码,即:return result+str(dec%2)这条语句,根据Dec2Bin(1)当前的result及dec的值,返回了字符串“1”,这个字符串就传给了还在外层等待的Dec2Bin(2)。以此类推,最终让Dec2Bin(10)这个函数也得到了它的result。
总结:递归就是外层的函数的结果取决于内层函数的相关值,直到内层函数一层一层地把相关的值都返回来为止。
新手一枚,自我学习中,有问题欢迎指正!
最新文章
- 史上最全QC学习方案,值得收藏!
- 将 instance 连接到 second_local_net - 每天5分钟玩转 OpenStack(85)
- Codeforces Round #346 (Div. 2)E - New Reform(DFS + 好题)
- 银行账户管理系统(oracle数据库连接池,数据库的链接,)
- [Stephen]页面实现瀑布流源码
- (转载)AS3领航系列教程 之 AS3程序的入口
- Android中使用ListView绘制自定义表格(2)
- [置顶] 强制访问控制内核模块Smack
- react学习之props
- nginx+apache 404错误页面
- spring整合mybatis,springMVC的0配置文件方式
- python——迭代器和生成器
- Python初学——pickle &; set
- JsonCPP库使用
- 常见内网IP段
- jqgrid获取选中行指定列的值
- Fiddler4入门--手机抓包工具安装和使用说明
- [CodeForces - 614C] C - Peter and Snow Blower
- java编程 求和
- Codeforces Round #265 (Div. 2) C. No to Palindromes! 构造不含回文子串的串