【发布时间】:2013-11-22 22:50:30
【问题描述】:
我正在尝试创建一对函数,给定一个“起始”数字列表,它将递归地添加到每个索引位置,直到定义的最大值(与里程表在汽车中的工作方式非常相似-- 每个计数轮增加至 9,然后重置为 1 并转移到下一个轮上)。
代码如下:
number_list = []
def counter(start, i, max_count):
if start[len(start)-1-i] < max_count:
start[len(start)-1-i] += 1
return(start, i, max_count)
else:
for j in range (len(start)):
if start[len(start)-1-i-j] == max_count:
start[len(start)-1-i-j] = 1
else:
start[len(start)-1-i-j] += 1
return(start, i, max_count)
def all_values(fresh_start, i, max_count):
number_list.append(fresh_start)
new_values = counter(fresh_start,i,max_count)
if new_values != None:
all_values(*new_values)
但是,当我运行 all_values([1,1,1],0,3) 并打印 number_list 时,我得到:
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1],
[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1],
[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1],
[1, 1, 1], [1, 1, 1], [1, 1, 1]]
这是不幸的。加倍知道如果我将 all_values 的第一行替换为
print(fresh_start)
我得到了我所追求的:
[1, 1, 1]
[1, 1, 2]
[1, 1, 3]
[1, 2, 1]
[1, 2, 2]
[1, 2, 3]
[1, 3, 1]
[1, 3, 2]
[1, 3, 3]
[2, 1, 1]
[2, 1, 2]
[2, 1, 3]
[2, 2, 1]
[2, 2, 2]
[2, 2, 3]
[2, 3, 1]
[2, 3, 2]
[2, 3, 3]
[3, 1, 1]
[3, 1, 2]
[3, 1, 3]
[3, 2, 1]
[3, 2, 2]
[3, 2, 3]
[3, 3, 1]
[3, 3, 2]
[3, 3, 3]
我已经尝试制作 fresh_start 的副本(通过 temp = fresh_start)并附加它,但输出没有变化。
谁能提供任何关于我可以做些什么来修复我的代码的见解?关于如何简化问题的反馈也将受到欢迎。
非常感谢!
【问题讨论】:
标签: python list function recursion