如何用随机数递归填充数组并递归打印它们?

时间:2016-12-29 13:40:58

标签: python arrays python-3.x recursion

可以递归填充带有随机数的数组(Python)。这是Python编程课程的一个问题。现在我正试图找出如何做到这一点。有人可以给我一个如何做的小费吗,拜托?我现在暂时被封锁了一段时间。我对递归没有任何问题,但我认为这是一个非常困难的问题。

以下是此问题的最小化范围。前两个函数:fillArrRecursively(arr, max, seed)displayArrRecursively(arr) (我可能不会添加/使用其他参数)是我需要的函数和必须重新定义的函数。我已经做了一个简单的迭代方法,它可以工作,但这不是问题的解决方案。

def fillArrRecursively(arr, max, seed):
    ### This is the iterative approach, but I need the recursive one
    random.seed(seed)
    for i in range(len(arr)):
        arr[i] = random.randint(0, max)

def displayArrRecursively(arr):
    ### This again is the iterative approach, but I need the recursive one
    for item in arr:
        print('{0:>5}'.format(item), end='')

def recursiveApproach(seed, length, max):
    ### This function may not be edited
    arr = [0] * length
    fillArrRecursively(arr, max, seed)
    displayArrRecursively(arr)

def main():
    ### This function may not be edited
    length = 100
    max = 20
    seed = random.randint(1, 1000000)
    recursiveApproach(seed, length, max)

if __name__ == '__main__':
    main()

3 个答案:

答案 0 :(得分:1)

好的,这很棘手,毫无用处。

无论如何,我所做的是使用seed参数作为索引来添加随机元素。

random.seed(seed) # This statement is executed only once, as it should be

def fillArrRecursively(arr, _max, seed):
    if seed>0:
        random.seed(seed)
        seed=0

    if abs(seed)<len(arr):
        arr[abs(seed)]=r(0,_max)
        return fillArrRecursively(arr,_max,seed-1)


def display(arr):
    if not arr:
        return ""
    if arr:
        print (arr[0]+1)
        return display(arr[1:])

从不可编辑的代码可以保证种子总是大于0.使用它作为优势将种子参数转换为具有负值的索引变量。但是,在建立索引时要小心,使用abs(seed)来获取绝对值。

希望这有帮助。

答案 1 :(得分:1)

如果真的需要:

  • fillArrRecursively的参数固定为arr, max, seed
  • 递归必须在fillArrRecursively本身发生,而不是在其中定义的嵌套函数

...然后问题是您将在每次递归调用中修改的内容,以便您知道要填充哪个元素以及何时结束。通常,您会将索引传递给递归树。

现在有一个机会窗口,因为 seed 参数应该只使用一次:使用相同的参数多次调用random.seed函数是没有意义的。因此,这个参数可以在递归调用中得到另一种用法,并且具有索引的含义。显然种子作为正数传递,人们可以同意种子的负值表示一个指数。这种对参数的重用使代码变得模糊,并且不可取,但考虑到约束,我认为这是要走的路:

def fillArrRecursively(arr, max, seed):
    if seed > 0:
        random.seed(seed)
        seed = -len(arr)
    if seed < 0:
        arr[-seed-1] = random.randint(0, max)
        fillArrRecursively(arr, max, seed+1)

对于显示部分,它更容易,因为您不需要修改数组,因此您可以随时切片:

def displayArrRecursively(arr):
    if len(arr):
        print('{0:>5}'.format(arr[0]), end='')
        displayArrRecursively(arr[1:])
    print()

答案 2 :(得分:0)

我假设列表已经创建并具有预定义的长度。

def FillList(data, length, max, seed, i=0):
    if i >= length: return data

    # move seeding outta here
    data[i] = random.randint(0, max)

    return FillList(data, length, max, seed, i + 1)

让我们继续输出清单:

def Output(data):
    if data:
        print(data[0], end='')
        Output(data[1:])

请注意,此代码可能效率低下,因为data[1:]会创建以索引1开头的列表副本。