可以递归填充带有随机数的数组(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()
答案 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
开头的列表副本。