鱼C论坛

 找回密码
 立即注册
查看: 1779|回复: 2

[已解决]关于23-24讲作业的递归实现二进制转换问题

[复制链接]
发表于 2017-6-29 22:27:25 | 显示全部楼层 |阅读模式

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

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

x
昨晚发了提问帖后,设置了最佳答案后突然发现看不懂自己之前写的代码了T^T,跟帖继续提问,结果今天帖子被吞了T^T
那我就还是继续提问吧……

题目要求是用除二取余法将十进制转换成二进制
  1. def binary(x):
  2.     result = []
  3.     def b(y):
  4.         y = x
  5.         if y == 0:
  6.             result.insert(0,1)
  7.         else:
  8.             b(y//2)
  9.             result.insert(0,y%2)
  10.     b(x)
  11.     return str(result)
  12. binary(5)
复制代码


上面这个程序执行后会报错,错误原因是递归深度超过默认值。
昨晚看了解答后,我已经明白了是因为5除2,得2余1,执行b(2)后,2除2,得1余0,然后是b(1)的无限循环,因此报错
现在不明白的是在执行b(2)和b(1)时,y=x这一句不会有错吗?是不是被直接跳过了?

另外谢谢昨晚给予解答的鱼油,可惜我忘记你的名字了,anyway,非常感谢~
最佳答案
2017-6-29 23:16:32
本帖最后由 lh625243422 于 2017-6-29 23:36 编辑
  1. def binary(x):
  2.     result = []
  3.     def b(y):
  4.         if y == 0:
  5.             return result
  6.         else:
  7.             result.insert(0,y%2)
  8.             b(y//2)#此处等同于 return b(y//2)
  9.     b(x)
  10.     return str(result)
  11. print(binary(5))
复制代码

你的程序中 y=x,其实质是y=5(x是上级函数被传入的参数)
这样就导致递归函数b的时候函数内变量y永远为5(传入参数y
的值每次递归都被修改为5),会一直迭代下去。
还有你的递归函数要有一个停止递归的语句例如,某个条件
成立的时候,return result,就不会再递归下去,当然result不能是
递归函数,否则一样会递归。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-29 23:16:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 lh625243422 于 2017-6-29 23:36 编辑
  1. def binary(x):
  2.     result = []
  3.     def b(y):
  4.         if y == 0:
  5.             return result
  6.         else:
  7.             result.insert(0,y%2)
  8.             b(y//2)#此处等同于 return b(y//2)
  9.     b(x)
  10.     return str(result)
  11. print(binary(5))
复制代码

你的程序中 y=x,其实质是y=5(x是上级函数被传入的参数)
这样就导致递归函数b的时候函数内变量y永远为5(传入参数y
的值每次递归都被修改为5),会一直迭代下去。
还有你的递归函数要有一个停止递归的语句例如,某个条件
成立的时候,return result,就不会再递归下去,当然result不能是
递归函数,否则一样会递归。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 22:45:00 | 显示全部楼层
lh625243422 发表于 2017-6-29 23:16
你的程序中 y=x,其实质是y=5(x是上级函数被传入的参数)
这样就导致递归函数b的时候函数内变量y永远为 ...

原来之前的理解还是不对,总算搞明白了!
非常感谢~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-28 07:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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