python – 使用递归创建随机元素列表

我被要求定义一个递归函数,它接受两个参数:

> n
> valmax

并返回从区间[0,valmax]中随机选取的n个数字的列表

`

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))`

但是,我得到了一个

RecursionError

如何修复我的代码,使其在区间[0,valmax]中返回一个包含n个随机数的列表?

最佳答案 你的逻辑错了.您需要每个函数调用返回n个随机整数,因此您不需要在列表中传递它.

每个函数在[0,valmax]范围内生成一个随机数,并将其连接到整数的随机列表,该整数的长度减去一个(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]
点赞