问题描述:求由数字1,2,3可以组成的所有三位数时,执行三次for循环就可以;求由数字1,2,3可以组成的所有四位数时,执行四次for循环就可以。但是对于数字1,2,3,当我们任意给定数字位数n时,该如何用Python编写程序?
答:对于不同的n,执行for循环的次数不一样,考虑用递归的方法来解决这一问题。编程如下:
n = 3
values = [1,2,3]
count = 0 # 计数,共有多少个符合条件的list
def f(res):
# 如果数组的长度为n,则count++,打印数组并返回
if len(res) == n:
global count
count += 1
print(res)
return
else:
for i in values:
res.insert(0,i) # 将i添加到list中
#print("now insert {}, list is {}".format(i, res))
f(res) # 递归
res.remove(i) # 递归结束,将上一步添加的i删除,进行下一次循环
#print("remove {}, list is {}".format(i, res))
mylist = []
f(mylist)
print("total count is :", count)
运行结果:
[1, 1, 1]
[2, 1, 1]
[3, 1, 1]
[1, 2, 1]
[2, 2, 1]
[3, 2, 1]
[1, 3, 1]
[2, 3, 1]
[3, 3, 1]
[1, 1, 2]
[2, 1, 2]
[3, 1, 2]
[1, 2, 2]
[2, 2, 2]
[3, 2, 2]
[1, 3, 2]
[2, 3, 2]
[3, 3, 2]
[1, 1, 3]
[2, 1, 3]
[3, 1, 3]
[1, 2, 3]
[2, 2, 3]
[3, 2, 3]
[1, 3, 3]
[2, 3, 3]
[3, 3, 3]
total count is : 27