我被要求定义一个包含两个参数的递归函数:
n
valmax
并返回从间隔n中随机选取的[0 , valmax]个数的列表
`

import random

def random_list(n, valmax, lst = []):
    """
    parameters : n of type int;
                 valmax of type int;
    returns    : a list of n numbers picked randomly from the interval
                 [0, valmax]
    """
    if len(lst) == n:
        return lst
    return [random.randint(0, valmax)] + random_list(n, valmax)

print(random_list(10,100))`

但是,我得到一个
递归错误
如何修复我的代码,以便它返回一个间隔n内带有[0, valmax]随机数的列表?

最佳答案

你的逻辑是错误的。您需要每个函数调用返回n随机整数,所以不需要在列表中传递它。
每个函数在[0, valmax]范围内生成一个随机数,并将其连接到长度小于1的整数随机列表(n-1),该列表是通过递归调用自身获得的。
基本情况是当n == 1时,在这种情况下,我们返回一个空列表。

import random
def random_list(n, valmax):
    if n == 0:
        return []
    return [random.randint(0, valmax)] + random_list(n-1, valmax)

还有一个测试:
random_list(10, 20)
#[20, 9, 4, 7, 3, 4, 3, 18, 19, 9]

07-24 16:47