鱼C论坛

 找回密码
 立即注册
查看: 966|回复: 10

[已解决]请问这段代码问题所在,只能转换1,2,4,,8,16,32这样的数,其他数显示RESTART: Shell

[复制链接]
发表于 2020-6-8 11:07:25 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 宋立赢 于 2020-6-8 11:10 编辑

import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
    if n == 0.5:
        global o
        o.reverse()
        print(o)
    else:
        o.append(int(n%2))
        n /= 2
        i(n)     
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)
最佳答案
2020-6-8 11:07:26
本帖最后由 Twilight6 于 2020-6-8 11:15 编辑

改成小于1就好了
import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
    if n < 1:
        global o
        o.reverse()
        print(o)
    else:
        o.append(int(n%2))
        n /= 2
        i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)

然后我觉得这样打印效果更好些:
import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
    if n < 1:
        global o
        o.reverse()
        for x in o:
            print(x,end='')
    else:
        o.append(int(n%2))
        n /= 2
        i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)

最佳答案

查看完整内容

改成小于1就好了 然后我觉得这样打印效果更好些:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 11:07:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-8 11:15 编辑

改成小于1就好了
import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
    if n < 1:
        global o
        o.reverse()
        print(o)
    else:
        o.append(int(n%2))
        n /= 2
        i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)

然后我觉得这样打印效果更好些:
import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
    if n < 1:
        global o
        o.reverse()
        for x in o:
            print(x,end='')
    else:
        o.append(int(n%2))
        n /= 2
        i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 11:17:52 | 显示全部楼层
import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
    if n < 1:      #<---修改这个条件,否则不是2的n次方的数都会陷入无限递归
        global o
        o.reverse()
        print(o)
    else:
        o.append(int(n%2))
        n /= 2
        i(n)     
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 11:19:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 11:20:03 | 显示全部楼层

import sys
sys.setrecursionlimit(100000000)
o = []
def i(n):
    global o
    if n < 1 and o != []:
        o.reverse()
        for x in o:
            print(x,end='')
    else:
        o.append(int(n%2))
        n /= 2
        i(n)
n = int(input('请输入需要转为二进制的十进制数:'))
i(n)
代码改这样,不然 0 时候不会打印
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 11:28:07 | 显示全部楼层
Twilight6 发表于 2020-6-8 11:20
代码改这样,不然 0 时候不会打印

好的好的,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 11:34:53 | 显示全部楼层
宋立赢 发表于 2020-6-8 11:28
好的好的,非常感谢

没事没事~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 11:37:04 | 显示全部楼层

那个...能讲下为啥是小于一么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 11:45:54 | 显示全部楼层

我琢磨明白了,再次感谢你的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-8 11:48:54 | 显示全部楼层
宋立赢 发表于 2020-6-8 11:37
那个...能讲下为啥是小于一么

只要比 1 小 余数肯定不为 1 了,就不用再次 o.append(int(n%2))

而你 0.5 就没考虑到其他非偶数被除的情况,比如 15 第一次除2  = 7.5  第二次 除2 = 3.75  第三次 = 1.875 第四次 等于 0.9375 这时候就可以返回了 不用在递归了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-8 12:52:21 | 显示全部楼层
Twilight6 发表于 2020-6-8 11:48
只要比 1 小 余数肯定不为 1 了,就不用再次 o.append(int(n%2))

而你 0.5 就没考虑到其他非偶数被除 ...

好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 20:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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