Python递归函数返回None而不是value

2024-04-25 07:07:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是在用Python和递归函数做一点实验

现在,我想写一个函数,它将一个数字分成4个部分,直到它小于4

例如,我输入函数20,它应该返回

[1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25,1.25]

如果我在return语句之前打印结果,我就会得到这个结果,但是如果我返回包含这些值的变量,我就无法得到这个结果

def break_up_number_into_fours(input):
    flag = 0
    input_list = []
    full_result = []
    if isinstance(input, list):
        input_list.extend(input)
    else:
        input_list.append(input)

    for item in input_list:
        if item > 4:
            result = [item/4]*4
            full_result.extend(result)
            flag = 1
        else:
            full_result.append(item)

    if flag == 1:

        break_up_number_into_fours(full_result)
    else:
        print(full_result)
        return full_result

test = break_up_number_into_fours(20)

print(test)

代码中可能有什么错误

非常感谢


1条回答
网友
1楼 · 发布于 2024-04-25 07:07:04

您没有从递归调用break_up_number_into_fours(full_result)返回任何值,您需要像这样做:

def break_up_number_into_fours(input):
    flag = 0
    input_list = []
    full_result = []
    if isinstance(input, list):
        input_list.extend(input)
    else:
        input_list.append(input)

    for item in input_list:
        if item > 4:
            result = [item/4]*4
            full_result.extend(result)
            flag = 1
        else:
            full_result.append(item)

    if flag == 1:

        return break_up_number_into_fours(full_result) // here you need to return the value in respective recursive call
    else:
        print(full_result)
        return full_result

test = break_up_number_into_fours(20)

print(test)

输出:

[1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25]

[1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25]

相关问题 更多 >