如何修复递归函数?

时间:2019-09-07 09:35:22

标签: python recursion

这是一个简单的递归函数问题,它从正数中提取每个数字。正如评论所提到的,我知道错误是由于全局变量引起的,但是我仍然不知道要修正它以获得预期的结果。谢谢。

def getdigits(n):
    if n == 0:    
        return list_1[::-1]
    list_1.append(n % 10)
    return getdigits(int(n / 10))



list_1 = []

print(getdigits(120)) # output = [1,2,0]
print(getdigits(5)) # output = [5,1,2,0]

但是预期的输出应该是

print(getdigits(120)) # expected output = [1,2,0]
print(getdigits(5)) # expected output = [5]

2 个答案:

答案 0 :(得分:0)

您正在使用现有的列表,该列表已经具有上一个函数调用中的值。

首先清除列表,然后尝试调用另一个值。\

尝试

def getdigits(n):
    if n == 0:    
        return list_1[::-1]
    list_1.append(n % 10)
    return getdigits(int(n / 10))



list_1 = []
print(getdigits(120))
list_1.clear() #clear list values
print(getdigits(5))

答案 1 :(得分:0)

def getdigits(n):
    global list_1
    if n == 0:

        listTemp = list_1

        list_1 = []

        return listTemp

    list_1.append(n % 10)
    return getdigits(int(n / 10))



list_1 = []

print(getdigits(120)) # output = [1,2,0]
print(getdigits(5)) # output = [5]

您需要在函数内将列表1声明为全局变量,以便可以在函数内清除列表1

我已经对其进行了测试并获得了输出