問題描述:求由數字1,2,3可以組成的所有三位數時,執行三次for迴圈就可以;求由數字1,2,3可以組成的所有四位數時,執行四次for迴圈就可以。但是對於數字1,2,3,當我們任意給定數字位數n時,該如何用python編寫程式?
答:對於不同的n,執行for迴圈的次數不一樣,考慮用遞迴的方法來解決這一問題。程式設計如下:
n =
3values =[1
,2,3
]count =
0# 計數,共有多少個符合條件的list
deff
(res)
:# 如果陣列的長度為n,則count++,列印陣列並返回
iflen
(res)
== n:
global count
count +=
1print
(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)
#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
使用Interlocked進行數字的原子操作
net 的interlocked 方法提供了一些方法進行數字的原子加減和賦值,例如 increment,decrement 和 and 方法,但是還遠遠不夠,所以 net via c 書中提到了 interlocked anything 模式,書中通過 compareexchange 方法實現了乙個...
演算法 數字的全排列 遞迴
對於數字的全排列問題,相比於使用窮舉法來說,通過遞迴法來解決可以大大減少演算法的時間複雜度與空間複雜度,使用遞迴演算法的好處即是 拋給程式乙個執行條件,乙個約束條件 結束遞迴過程 程式便可自己完成所有過程。輸入乙個數字n,使用遞迴演算法輸出1 n所有的排列 全排列問題 includeusing na...
遞迴 求數字各種排列的和
description 給你乙個數字n 1 n 10000 並且n的各個位上沒有0 他想知道將n的每個位置上的數字全部拿出來,重新排列得到的所有數字的和是多少 比如122的所有排列為 122 212 221 555 input 有多組輸入資料,第一行為乙個數字case,代表有多少組輸入資料 case...