无法从递归函数返回列表

时间:2016-06-23 04:02:12

标签: python python-3.x recursion

我在使用Python返回递归函数的结果时遇到了问题。

我的函数需要返回最大list_upper_range范围内整数之间可能的比较对的列表。

重要的是,每对中只有两个整数配对。

该函数按预期运行,直到我打印结果,并将结果返回到调用函数的位置。

def generate_comparisons_list(list_upper_range, iter_start, list_of_cases):
    if iter_start == list_upper_range:
        #print(list_of_cases) here verified condition was met
        return list_of_cases

    for i in range(iter_start+1, list_upper_range):
        this_case = [iter_start, i]
        list_of_cases.append(this_case)

    iter_start += 1
    generate_comparisons_list(list_upper_range, iter_start, list_of_cases)

list_of_cases_a_and_b = generate_comparisons_list(list_upper_range=6, iter_start=1, list_of_cases=[])

print(list_of_cases_a_and_b) #returns None

结果应该以

的形式返回
[[1, 2], [1, 3], [1, 4], [1, 5], [2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]

我是否误解了Python在递归函数中处理列表的方式?

2 个答案:

答案 0 :(得分:3)

python函数不会自动返回最后一个语句(ruby的方式),你必须做一个

return generate_comparisons_list(list_upper_range, iter_start, list_of_cases)

在你的功能结束时。

看看here,看它是否有效。

答案 1 :(得分:1)

您的函数generate_comparisons_list()旨在返回一个列表,但在递归调用中,将丢弃返回值。您需要返回结果

return generate_comparisons_list(list_upper_range, iter_start, list_of_cases)