wjhzj 发表于 2022-10-30 20:31:56

这是一个把利用递归把二进制转换成十进制的代码,有一个问题想请教?

本帖最后由 wjhzj 于 2022-10-31 16:23 编辑

这是一个把利用递归把十进制转换成二进制的代码,请问标黄的那句为什么改成while(n > 0),结果就不对了呀?
lst = []
def shitoer(n):
    if (n > 0):
      m = n % 2
      lst.append(m)
      n = n //2
      shitoer(n)
    return lst

num = int(input('请输入一个十进制正整数:'))
result = shitoer(num)
result.reverse()
string = ''
l = len(result)
for i in range(l):
    string = string + str(result)
print('转换为二进制的结果是:'+ '0b' + string)

用if语句的结果:
请输入一个十进制正整数:8
转换为二进制的结果是:0b1000

用while语句的结果:
请输入一个十进制正整数:8
转换为二进制的结果是:0b110110011011000

tommyyu 发表于 2022-10-30 20:36:13

本帖最后由 tommyyu 于 2022-10-30 20:41 编辑

递归的基本格式:
def func(参数):
    if 边界条件成立:
      ...
      func(缩小问题范围)
    else:
      到达边界

就你这个代码来说,如果使用 while 就不用使用递归了

jackz007 发表于 2022-10-30 21:08:30

本帖最后由 jackz007 于 2022-10-30 21:10 编辑

         为什么要把 if 改成 while,你的企图是什么,你知道这种修改意味着什么吗?
          这个函数明明是把十进制数变成二进制字符串,却被你说成是二进制转十进制,我还以为是真的呢,你的头脑非常糊涂,可以说是一塌糊涂!

wjhzj 发表于 2022-10-30 21:08:57

tommyyu 发表于 2022-10-30 20:36
递归的基本格式:
def func(参数):
    if 边界条件成立:


感谢您的回复,但是我还是不太理解为什么您说使用while就不用使用递归了呢,while语句和if语句在这里功能上有什么区别呀,如果您方便的话,期待得到您的解答

wjhzj 发表于 2022-10-30 21:12:54

jackz007 发表于 2022-10-30 21:08
为什么要把 if 改成 while,你的企图是什么,你知道这种修改意味着什么吗?

一开始我用的就是while,然后一直报错,改成if以后就好了。没有什么企图,只是想满足当n大于零时才运行下面的代码,等于零的时候跳出。但是我不理解为什么while不行,所以发了这个帖子,不太清楚这种修改意味着什么,

jackz007 发表于 2022-10-30 21:21:39

本帖最后由 jackz007 于 2022-10-30 21:55 编辑

wjhzj 发表于 2022-10-30 21:12
一开始我用的就是while,然后一直报错,改成if以后就好了。没有什么企图,只是想满足当n大于零时才运行下 ...

          if 是一次性执行,如果条件为真就执行,执行一次就拉倒;while 是循环,需要反复执行,一直到把 while 后面的条件搞黄为止,这就是区别。

wjhzj 发表于 2022-10-31 16:24:44

jackz007 发表于 2022-10-30 21:08
为什么要把 if 改成 while,你的企图是什么,你知道这种修改意味着什么吗?
          这个函数 ...

是我写帖子的时候不小心搞错了

wjhzj 发表于 2022-10-31 16:25:21

jackz007 发表于 2022-10-30 21:21
if 是一次性执行,如果条件为真就执行,执行一次就拉倒;while 是循环,需要反复执行,一直 ...

感谢解答,已明白!
页: [1]
查看完整版本: 这是一个把利用递归把二进制转换成十进制的代码,有一个问题想请教?