鱼C论坛

 找回密码
 立即注册
查看: 2590|回复: 4

[已解决]求助,第23,24讲课后习题递归法十进制转二进制

[复制链接]
发表于 2020-2-15 19:52:48 | 显示全部楼层 |阅读模式

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

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

x
def bin(a):
    str1=""
    if a==0:
        str2=str(str1[::-1])
        return str1
    else:
        b=a%2
        str1+=str(b)
        return bin(a//2)
   
print(bin(789))

请问为什么我的程序运行后什么都出不来?
最佳答案
2020-2-15 20:01:33
本帖最后由 zltzlt 于 2020-2-15 20:03 编辑

应该把 str1 放到函数外面,不然每次递归都会将 str1 清空。

  1. str1 = ""


  2. def bin(a):
  3.     global str1
  4.     if a == 0:
  5.         str2 = str(str1[::-1])
  6.         return str1
  7.     else:
  8.         b = a % 2
  9.         str1 = str(b) + str1
  10.         return bin(a // 2)


  11. print(bin(789))
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-15 19:55:59 | 显示全部楼层
无限递归
这个函数的意思是只要a不等于0就再调用自己
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-15 20:00:43 | 显示全部楼层
qiuyouzhi 发表于 2020-2-15 19:55
无限递归
这个函数的意思是只要a不等于0就再调用自己

最后面 我返回的是 a//2 啊,怎么可能会一直非零。麻烦再教一下。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-15 20:01:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zltzlt 于 2020-2-15 20:03 编辑

应该把 str1 放到函数外面,不然每次递归都会将 str1 清空。

  1. str1 = ""


  2. def bin(a):
  3.     global str1
  4.     if a == 0:
  5.         str2 = str(str1[::-1])
  6.         return str1
  7.     else:
  8.         b = a % 2
  9.         str1 = str(b) + str1
  10.         return bin(a // 2)


  11. print(bin(789))
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-15 20:05:00 | 显示全部楼层
zltzlt 发表于 2020-2-15 20:01
应该把 str1 放到函数外面,不然每次递归都会将 str1 清空。

感谢感谢,查错误的时候也想到了是字符串会不停清空,但是不知道怎么改。现在记住了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 03:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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