什么是递归?用十进制转二进制的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。
总结:递归就是外层的函数的结果取决于内层函数的相关值,直到内层函数一层一层地把相关的值都返回来为止。
新手一枚,自我学习中,有问题欢迎指正!
什么是递归?用十进制转二进制的Python函数示例说明的更多相关文章
- C语言之利用递归将十进制转换为二进制
#include<stdio.h>#include<stdlib.h>void change2(int num){ if (num != 0) { change2(n ...
- 5、StringBuffer与StringBuilder的区别(十进制转二进制)
1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们 ...
- 十进制转二进制and位运算符
先给大家送个福利! ---------------简单口算-------------------------- 10 >> 1010 除2取余倒写 /* 十进制转二进制规则是:除二取 ...
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
- C++十进制转换为二进制
题目内容:将十进制整数转换成二进制数. 输入描述:输入数据中含有不多于50个的整数n(-231<n<231). 输出描述:对于每个n,以11位的宽度右对齐输入n值,然后输出“-->” ...
- [原创]PostgreSQL中十进制、二进制、十六进制之间的相互转换
在PostgreSQL中,二进制.十进制.十六进制之间的转换是非常方便的,如下: 十进制转十六进制和二进制 mydb=# SELECT to_hex(10); to_hex -------- a (1 ...
- C++进制转换(十进制转二进制、八进制、随意进制)
十进制转二进制: //十进制转二进制 #include<iostream> using namespace std; void printbinary(const unsigned int ...
- PHP函数十进制、二进制、八进制和十六进制转换
PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明,主要掌握各进制转换的方法,以应用于实际开发. 一,十进制(decimal system)转换函数说明 1,十进制转二进制 decbin ...
- Formiko总结整数十进制转换二进制原理
引子: 为什么十进制转二进制的“辗转相除记录余数倒序输出”的算法是正确的?这个问题陪伴了Formiko半年. 实践: 实践一:把十进制数100转换成二进制数的图 上图和和下图唯一的区别在最后一位上 ...
随机推荐
- I2C controller core之Bit controller(05)
6 generate statemachine 1 -- port cmd_ack : out std_logic; -- command completed 4 -- architecture ty ...
- SLAM: Structure From Motion-移动中三维场景重建
wiki链接:https://en.wikipedia.org/wiki/Structure_from_motion 三维重建: 三维物体建模总结 1. 视野内三维物体重建 : Kinect fusi ...
- Scala类型系统——高级类类型(higher-kinded types)
高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors).它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它 ...
- https://blog.csdn.net/cddcj/article/details/52193932
https://blog.csdn.net/cddcj/article/details/52193932 兼容性
- redis客户端连接到服务器的步骤
和大多数客户端连接到服务器一样,redis-cli连接到服务器也主要分为两个阶段,请求连接阶段和数据传送阶段.具体来讲redis-cli做的事情有: 1.以socket方式建立连接: 2,选择相应的数 ...
- echarts 中 请求后台改变数据
function tablenumber() { $.ajax({ type : "get", url : "../res/error.json", dataT ...
- virtualenv技巧
看了你就懂了 https://segmentfault.com/a/1190000004079979 你在一个机器上 开发不通的项目,需要不通版本的python怎么办 1.首先安装python3 ht ...
- display显示属性理解
display属性设置一个元素应如何显示,是我们在前端开发中常常使用的一个属性,其中,最常见的有: 目录 display:none;表示此元素将不被显示. display:block;将元素显示为块元 ...
- Spring Cloud Sleuth(十四)
作用 再微服务中 服务调用服务很常见.服务中相互调用链路追踪的尤为重要,能够帮助我们再异常时分析出哪个服务出了异常.以及各个链路中相互调用所消耗时间,通过这些数据能够帮助我们分析出各个服务的性能瓶颈 ...
- ACDream - Crayon
题目: Description There are only one case in each input file, the first line is a integer N (N ≤ 1,000 ...