鱼C论坛

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

[已解决]关于递归,定义二进制转换函数的问题

[复制链接]
发表于 2020-10-29 16:30:06 | 显示全部楼层 |阅读模式

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

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

x
def shibianer(x):
    a = int(x)
    s = 0
    c = 1
    e = 0
    while c != 0:
        c = int(a/2)
        b = int(a%2)
        a = c
        s += 1
        e = b*10**(s-1)+e
    return e
c = shibianer(255)
print(c)
上边的是我写的用循环进行10进制转换成2进制
然后改成用递归来写的时候就蒙了,用的数组a,为什么else后面的 a返回不出来
def bian(x):
    if x != 0:
        a = []
        if x % 2 == 0:
            a.append(0)
        else:
            a.append(1)
        bian(int(x / 2))
        print(a)
    else:
        return a

如果改成用数来做也会出现同样的问题
是要用到全局变量吗?
最佳答案
2020-10-29 16:42:48
因为你的a是在if中定义赋初值的,最后一次递归的时候x为0,直接进入else,但是此时a没有定义,直接return a,就报错了。
再者,你是打算直接在里面print还是打算return啊?若直接在函数里面print,那不必写最后两行;若打算return,那么程序要有问题,就时递归的结果没有利用起来,你最终得不到结果
  1. def bian(x):
  2.     a=[]
  3.     if x != 0:
  4.         if x % 2 == 0:
  5.             a.append(0)
  6.         else:
  7.             a.append(1)
  8.         a=bian(int(x / 2))+a
  9.         #print(a)
  10.     return a
  11. print(bian(4))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-29 16:42:48 | 显示全部楼层    本楼为最佳答案   
因为你的a是在if中定义赋初值的,最后一次递归的时候x为0,直接进入else,但是此时a没有定义,直接return a,就报错了。
再者,你是打算直接在里面print还是打算return啊?若直接在函数里面print,那不必写最后两行;若打算return,那么程序要有问题,就时递归的结果没有利用起来,你最终得不到结果
  1. def bian(x):
  2.     a=[]
  3.     if x != 0:
  4.         if x % 2 == 0:
  5.             a.append(0)
  6.         else:
  7.             a.append(1)
  8.         a=bian(int(x / 2))+a
  9.         #print(a)
  10.     return a
  11. print(bian(4))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-3 22:49:53 | 显示全部楼层
sunrise085 发表于 2020-10-29 16:42
因为你的a是在if中定义赋初值的,最后一次递归的时候x为0,直接进入else,但是此时a没有定义,直接return a ...

感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 16:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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