davidmou 发表于 2023-7-13 11:30:01

递归问题

# 0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。
list =[]
def bin(x):
    if x == 1:
      list.append(1)
      print(str(list.reverse()))
      return 1
    elif x % 2 == 0:
      list.append(0)
      return bin(x / 2)
    elif x % 2 == 1:
      list.append(1)
      return bin(x // 2)
   
bin(152)
不知道为什么会输出None
求指点

陶远航 发表于 2023-7-13 11:30:38

在你的代码中,出现了一些问题导致输出为None。以下是你提供的代码中存在的问题和如何修复它们:

1. list 是Python中的保留关键字,不能作为变量名使用。请避免使用list作为变量名,以免引起命名冲突。将其改为其他名称,比如result。

2. 当调用list.reverse()时,它会原地反转列表,并返回None。所以,str(list.reverse()) 实际上返回None。你可以先反转列表,然后再将其转换为字符串。

修复后的代码如下:

def decimal_to_binary(x):
    result = []
    if x == 0:
      return '0'
    elif x == 1:
      result.append(1)
    elif x % 2 == 0:
      result.append(0)
      result.extend(decimal_to_binary(x // 2))
    else:
      result.append(1)
      result.extend(decimal_to_binary(x // 2))
    return ''.join(map(str, result[::-1]))

print(decimal_to_binary(152))# 输出: '10011000'


在修复后的代码中,我将函数名从bin改为了decimal_to_binary,并创建了一个空的result列表来保存二进制数的每一位。递归地调用函数来转换除以2后的整数部分,并将余数添加到result列表中。最后,将result反转并将其连接为一个字符串,并返回结果。

希望这可以解决你的问题!

歌者文明清理员 发表于 2023-7-13 12:12:01

陶远航 发表于 2023-7-13 11:30
在你的代码中,出现了一些问题导致输出为None。以下是你提供的代码中存在的问题和如何修复它们:

1. list...

你不是被取消资格了吗@sfqxx @isdkz

sfqxx 发表于 2023-7-13 12:34:40

歌者文明清理员 发表于 2023-7-13 12:12
你不是被取消资格了吗@sfqxx @isdkz

6

陶远航 发表于 2023-7-13 12:39:36

歌者文明清理员 发表于 2023-7-13 12:12
你不是被取消资格了吗@sfqxx @isdkz

是的,小甲鱼明确跟我说这个月取消了
但是最佳答案是最快的加积分的方式

歌者文明清理员 发表于 2023-7-13 12:40:11

陶远航 发表于 2023-7-13 12:39
是的,小甲鱼明确跟我说这个月取消了
但是最佳答案是最快的加积分的方式

@sfqxx

歌者文明清理员 发表于 2023-7-13 12:41:39

(人工回答)


reverse() 只是反转列表,并不返回内容,你 print(print("text"))不也输出的None?(对于外面的print)
你可以自定义一个函数,不返回任何内容,在print一下不就是NOne?
你可以这样改:
list.reverse()
print(list)
或者:
list = list[::-1]
至于还有一种方法,因为你变量名用了list所以就用不了了

sfqxx 发表于 2023-7-13 12:48:56

歌者文明清理员 发表于 2023-7-13 12:40
@sfqxx

歌者文明清理员 发表于 2023-7-13 12:49:43

sfqxx 发表于 2023-7-13 12:48


?

sfqxx 发表于 2023-7-13 13:41:03

陶远航 发表于 2023-7-13 12:39
是的,小甲鱼明确跟我说这个月取消了
但是最佳答案是最快的加积分的方式

我觉得还是技术贴,一个最佳5积分好像

陶远航 发表于 2023-7-13 14:00:46

sfqxx 发表于 2023-7-13 13:41
我觉得还是技术贴,一个最佳5积分好像

技术贴得有人评分啊
页: [1]
查看完整版本: 递归问题