用遞迴的方法進行數字排列

2021-09-25 23:07:07 字數 1424 閱讀 6496

問題描述:求由數字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...