鱼C论坛

 找回密码
 立即注册
查看: 2592|回复: 7

[已解决]python入门 十进制转二进制 递归函数求解释,谢谢各位

[复制链接]
发表于 2018-1-3 11:47:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 z000000x 于 2018-1-3 11:49 编辑

帮忙解释一下这个递归函数,看得绕进去了,代码运行是没有问题的,实现十进制到二进制的转化。

  1. #用递归函数实现bin()函数
  2. def newBin(n):
  3.     result=''
  4.     if n:
  5.         result = newBin(n//2)
  6.         return result+str(n%2)
  7.     else:
  8.         return result

  9. temp=int(input("请输入一个十进制数"))
  10. answer=newBin(temp)
  11. print(answer)
复制代码
最佳答案
2018-1-3 12:40:08
z000000x 发表于 2018-1-3 12:09
谢谢了,这个循环我看懂了,我主要想问的是用递归函数求解的思路

递归其实只是循环的另一种方式,你理解了循环,递归就简单多了
只要记住每次进入递归都会暂停执行进入递归以下的代码,等到返回的时候再接着往下执行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-3 11:51:24 | 显示全部楼层
把n的值带个数进去,最小化N,走一下流程就懂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-3 11:59:12 | 显示全部楼层
先明白两个主要的while循环是做什么的:
    while dec:#这个循环用来找出每一位数0或1
        quo = dec % 2
        dec = dec // 2
        temp.append(quo)
    while temp:#逆序输出即得到结果
        result += str(temp.pop())

然后去搞清楚十进制转换为二进制的数学过程,参考:
http://bbs.fishc.com/thread-67123-1-1.html

最后举个例子,看看上面过程是怎么实现的:
比如传入15
那么进入函数后,第一个循环过程如下:
quo == 13%2==1,dec == dec//2 == 6,temp == [1]
quo == 6%2==0,dec == dec//2 == 3,temp == [1,0]
quo == 3%2==1,dec == dec//2 == 1,temp == [1,0,1]
quo == 1%2==1,dec == dec//2 == 0,temp == [1,0,1,1]
退出循环
进入下一个循环,将temp逆序赋值给result = 1101
所以15的二进制表示为1101
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-3 12:09:23 | 显示全部楼层
BngThea 发表于 2018-1-3 11:59
先明白两个主要的while循环是做什么的:
    while dec:#这个循环用来找出每一位数0或1
        quo = de ...

谢谢了,这个循环我看懂了,我主要想问的是用递归函数求解的思路
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-3 12:40:08 | 显示全部楼层    本楼为最佳答案   
z000000x 发表于 2018-1-3 12:09
谢谢了,这个循环我看懂了,我主要想问的是用递归函数求解的思路

递归其实只是循环的另一种方式,你理解了循环,递归就简单多了
只要记住每次进入递归都会暂停执行进入递归以下的代码,等到返回的时候再接着往下执行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-3 13:53:53 | 显示全部楼层
BngThea 发表于 2018-1-3 12:40
递归其实只是循环的另一种方式,你理解了循环,递归就简单多了
只要记住每次进入递归都会暂停执行进入递 ...

哦,原来是这样,“暂停执行递归以下的代码”,这下比较容易明白了,非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 18:28:29 | 显示全部楼层
z000000x 发表于 2018-1-3 13:53
哦,原来是这样,“暂停执行递归以下的代码”,这下比较容易明白了,非常感谢

老哥,我也看蒙蔽了,完全绕进去了,我把数字带进去,越想越蒙。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 18:51:02 | 显示全部楼层
  1. def tr(x):
  2.     if x==0:
  3.         return "0"
  4.     else:
  5.         return tr(x//2)+str(x%2)
复制代码

这个更容易你理解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-3 15:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表