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

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


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]?


青春有我
浏览 205回答 3
3回答

富国沪深

你的逻辑是错误的。您需要每个函数调用都返回n随机整数,因此您不需要将其传递到列表中。每个函数在范围内生成一个随机数,[0, valmax]并将其连接到整数的随机列表,该列表的长度减一 ( n-1),它是通过递归调用自身获得的。基本情况是 when n == 1,在这种情况下我们返回一个空列表。import randomdef 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]

阿波罗的战车

不要保留默认参数(这也可能导致连续调用出现意外行为),而是使用yield更清洁的解决方案。此外,只需用于random.randint(0, valmax)在0和之间生成单个随机整数valmax:import randomdef random_list(n, valmax):  if n:    yield random.randint(0, valmax)    yield from random_list(n-1, valmax)print(list(random_list(10, 10))) #create a list of length ten with random values between 0 and 10, inclusive.输出:[4, 6, 9, 1, 10, 2, 2, 8, 2, 10]

慕少森

你可以写一个通用build_list函数 -import randomdef identity (x):  return xdef build_list (size, proc = identity):  if size == 0:    return []  else:    return build_list (size - 1, proc) + [ proc (size - 1) ]print (build_list (5))# [ 0, 1, 2, 3, 4 ]print (build_list (5, lambda _: random.randint (0, 10)))# [ 4, 7, 7, 3, 6 ]random_list可能是一个专业build_list——def random_list (size, valmax):  return build_list (size, lambda _: random.randint (0, valmax))print (random_list (5, 10))# [ 1, 7, 4, 7, 0 ]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python