-1

使用递归而不是使用for i in range(11):的目的是因为它有利于从头开始尝试解决特定的数学问题。该函数将被更改,以便它只返回[n]与某些条件匹配的内容。

print(numbers)=[[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]]为什么有多余的括号? print(numbers[7])=IndexError: list index out of range这与额外的括号有什么关系?

# A function that is supposed to help sorting numbers in a list
def sorting_numbers(n):
    if n > 1:
        return [n] + sorting_numbers(n-1)
    else:
        return [1]

numbers = []
n = 10
numbers = (sorting_numbers(n))
print(numbers)

print(numbers)=[[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]]为什么有多余的括号? print(numbers[7])=IndexError: list index out of range这与额外的括号有什么关系?

4

2 回答 2

0

每当您进行递归调用时,都会返回一个元组:(number, recursive_result)。因此,每次递归时,都会在最终结果中嵌入另一层元组。

看起来您的意图只是将数字从1输入数字相加,因此您所要做的就是更改第 3 行以返回递归调用的结果加上原始数字,而不是直接返回它们.

def function(number):
    if number > 1:
        # return the recursive result added to the original number
        return number + function(number-1) 
    else:
        return number

作为旁注,你应该给你的函数一个更具描述性的名字,这样它的目的就很清楚了!

于 2013-08-07T21:19:26.127 回答
0

好吧,如果您真的想对这样一个简单的问题使用递归 - 请注意,它的效率非常低,并且会导致接近maximum recursion depth exceeded的值出错(Python 并非旨在有效地处理递归):n1000

def storing_numbers(n):
    if n > 1:
        return [n] + storing_numbers(n-1)
    else:
        return [1]

或者更短一点:

def storing_numbers(n):
    return [] if n <= 0 else [n] + storing_numbers(n-1)

请注意我们如何构建列表,并且基本案例也返回一个列表。像这样使用它:

numbers = storing_numbers(10)
numbers
=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

当然,使用递归函数为学术练习之外的任何事情建立一个列表是不现实的。一个现实生活中的实际实现会这样做:

list(range(10, 0, -1))
=> [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

以下是您如何使用列表推导来过滤符合特定条件的数字,比如说,只有偶数:

[x for x in range(10, 0, -1) if x % 2 == 0]
=> [10, 8, 6, 4, 2]
于 2013-08-07T22:12:33.067 回答