首页 > 解决方案 > 使用递归创建随机元素列表

问题描述

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

`

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]

标签: pythonrecursionrandom

解决方案


你的逻辑是错误的。您需要每个函数调用都返回n随机整数,因此您不需要将它传递到列表中。

每个函数在范围内生成一个随机数,[0, valmax]并将其连接到长度减一 ( n-1) 的整数随机列表,它通过递归调用自身获得。

基本情况是 when 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]

推荐阅读