鱼C论坛

 找回密码
 立即注册
查看: 3061|回复: 19

一个简单的递归问题,求教

[复制链接]
发表于 2015-1-3 20:24:51 | 显示全部楼层 |阅读模式
10鱼币
  1. #10进制到2进制的转换
  2. def shitoer(x):
  3.     if x == 0:
  4.         return
  5.     else:
  6.         r = x % 2
  7.         shitoer(x // 2)
  8.         print(r,end='')
  9.         return
  10. shitoer(100)
复制代码
目前以实现2进制转换,打印出来的是1100100,现在问题来了,怎么能像python的bin函数一样返回一个'0b1100100'呢,怎么加上0b前缀,在函数内能实现吗

评分

参与人数 1鱼币 +30 收起 理由
~风介~ + 30 我是来发奖励的!:)

查看全部评分

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

使用道具 举报

发表于 2015-1-3 20:24:52 | 显示全部楼层
  1. #10进制到2进制的转换
  2. def shitoer(x):
  3.     if x == 0:
  4.         print('0b',end = '')
  5.         return
  6.     else:
  7.         r = x % 2
  8.         shitoer(x // 2)
  9.         print(r,end='')
  10.         return
  11. shitoer(100)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-3 21:22:12 | 显示全部楼层
  1. def shitoer(x,s='0b'):
  2.     if x == 0:
  3.         return s
  4.     else:
  5.         r = x % 2
  6.         return shitoer(x // 2,s+str(r))
  7. print(shitoer(100))
复制代码

评分

参与人数 1鱼币 +5 收起 理由
挥舞乾坤 + 5 非常感谢,提供了一个思路,受教了

查看全部评分

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

使用道具 举报

发表于 2015-1-3 21:34:27 | 显示全部楼层
坐等大神~{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-3 21:55:47 | 显示全部楼层

这么简单就解决了,我怎么没想到呢,看来对递归的理解不够,谢谢了,你的答案改动少,分给你了

评分

参与人数 1鱼币 +20 收起 理由
~风介~ + 20 我是来发奖励的!:)

查看全部评分

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

使用道具 举报

 楼主| 发表于 2015-1-4 16:45:28 | 显示全部楼层

结果不对需要改一下
  1. def shitoer(x,s='0b'):
  2.     if x == 0:
  3.         return s
  4.     else:
  5.         r = x % 2
  6.         return shitoer(x // 2) + str(r)
  7. print(shitoer(100))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-4 18:50:12 | 显示全部楼层
挥舞乾坤 发表于 2015-1-4 16:45
结果不对需要改一下
  1. def shitoer(x,s='0b'):
  2.     if x == 0:
  3.         return s
  4.     else:
  5.         r = x % 2
  6.         return shitoer(x // 2,s[:2]+str(r)+s[2:])
  7. print(shitoer(100))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-4 18:55:29 | 显示全部楼层
挥舞乾坤 发表于 2015-1-4 16:45
结果不对需要改一下

你的只能算是在函数里面调用自身,一般递归都是要在某个条件return自身的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-4 22:41:21 | 显示全部楼层
bevin 发表于 2015-1-4 18:55
你的只能算是在函数里面调用自身,一般递归都是要在某个条件return自身的

我的理解函数调用自身就是递归。楼主代码的问题是在函数中打印,这样做的问题是函数的重用性不好。调用函数的代码不知道函数的返回值。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-4 22:42:43 | 显示全部楼层
若说完美,两段代码都有bug,因为在实参是'0'的时候输出都不对。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-4 22:45:34 | 显示全部楼层
没想出来用递归解决,并且和BIF的bin()完全一样的方法。期待高手。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-5 13:20:37 | 显示全部楼层
微逻辑 发表于 2015-1-4 22:45
没想出来用递归解决,并且和BIF的bin()完全一样的方法。期待高手。
  1. def shitoer(x):
  2.     if x == 0:
  3.         return '0b0'
  4.     else:
  5.         r = x % 2
  6.         return shitoer(x // 2).rstrip('0') + str(r) if x == 1 else shitoer(x // 2) + str(r)
  7. print(shitoer(0))
复制代码


目前只能想到这样解决0的问题,期待更好的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-5 18:01:20 | 显示全部楼层
不明觉厉
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-24 16:32:51 | 显示全部楼层
我来看看{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-24 19:23:21 | 显示全部楼层
嗯。。。。。。。。。。。。。。。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-1-24 22:17:55 | 显示全部楼层
顶~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-26 13:02:00 | 显示全部楼层

如何发这种种可以复制的代码?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-27 00:29:44 | 显示全部楼层
你№ 发表于 2015-3-26 13:02
如何发这种种可以复制的代码?

这里:
屏幕快照 2015-03-27 上午12.27.16.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-27 23:00:14 | 显示全部楼层

  1. print('谢谢!!!')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-7-14 15:20:12 | 显示全部楼层
高手在民间
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-14 07:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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