看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《lancelet (修行非為絕情)》之銘言: : 雖然是高中的"排列"不過真的把我難倒了 : 望佛心人幫忙,感謝 <(_ _)> 來來來,這問題可以一步一步慢慢想. 先想第一種情況,陣列只有一筆資料: a[0] = 1 它的排列就是一筆資料,這情況,我們還不知道permu程式是什麼樣子. 所以要再想兩筆資料的情況 a[0] = 1 a[1] = 2 這就先取兩筆資料的任何一個,再把兩筆資料的另一部份也求出排列,然後把頭接上. 所以permu程式變成: For I = 0 To 1 Head = a[I] '這是排列的頭,可能是1或2 Others = all_but(a, Head) '這是把頭摘掉之後其他資料,要用來做後續排列 ... Next Others會只剩一筆資料. 假定以上程式是permu函數,則permu對包含兩筆資料的a陣列, 和只包含一筆資料的Others陣列,處理程式一模一樣. 把permu函數的外觀補全: func permu(array a, length n) as array if (n <= 1) return a for i = 0 to n head = a[i] others = all_but(a, head) 'all_but函數,要另外寫 o_permus = permu(others, n-1) array b = {} for j = 0 to n-1 b = concat(b, concat(head, o_permus[j])) 'concat函數銜接兩陣列為 '一陣列,也要另外寫 next next return b end func 這是個簡單的遞迴混合迴圈的方法. 如果討厭遞迴就要想辦法把遞迴部份展開轉化成純迴圈. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.212.178 ※ 編輯: yauhh 來自: 218.160.212.178 (01/22 10:32)
lancelet:感謝 01/23 01:31