吃個栗子。
數列: 第乙個與第乙個交換
可以得到1 將序列放進perm函式遞迴,然後
——遞迴
數列第乙個與第乙個交換
得到2 ,輸出1,2,3 (此時low=high,因為序列只有一位數,因此輸出列表list)
數列第乙個與第乙個交換回來,結果仍然是
數列第乙個與第二個交換
得到3,輸出1,3,2
又第乙個與第二個交換回來,變回
——遞迴完畢序列恢復原狀
數列: 第乙個與第二個交換
可以得到2,
——遞迴
數列第乙個與第乙個交換
得到1 ,輸出2,1,3
數列第乙個與第乙個交換回來,結果仍然是
數列第乙個與第二個交換
得到3,輸出2,3,1
又第乙個與第二個交換回來,變回
—–遞迴完畢
序列第乙個與第二個交換
序列恢復原狀
數列: 第乙個與第三個交換
可以得到3,
——遞迴
數列第乙個與第乙個交換
得到1 ,輸出3,1,2
數列第乙個與第乙個交換回來,結果仍然是
數列第乙個與第二個交換
得到2,輸出3,2,1
又第乙個與第二個交換回來,變回
—–遞迴完畢
序列第乙個與第二個交換
序列恢復原狀
演算法可以簡單地寫作,其中perm代表全排列函式。
perm()=1perm()+2perm()+3perm()
perm()=2perm()+3perm()
perm()=1perm()+3perm()
perm()=1perm()+2perm()
實現**如下:
#include #define n 10
int a[n];
void swap(int *a, int *b)
void perm(int *a, int l, int r)
printf("\n");
} else
}} int main()
perm(a, 0, 2);
return 0;
}
遞迴實現全排列
生成全排列的最簡單的遞迴方法的思想 1.可以把幾個數字分成前半部和最後一位。對於0123這四個數來說,最後一位 紅色字型 所出現的情況只有以下四類 先不管前三個數的排列組合情況 3 2 1 0這樣我們就把四個數字的排列問題,變成了3個 對於上述的每一行來說 2.終結條件是1個數字的排列就是其本身。直...
遞迴實現全排列
1 如果運算力,和理亂麻的水平不夠。盡量不要復用本地變數 比如c用來計數,不計數後 又用來做其它比如作為步長 除非你確認不會出現問題。2 盡量讓每個邏輯單元 函式內可以有多個邏輯單元 盡量小,邏輯盡量要清晰 3 語言組織能力有限,就說這些了。未整理,抱歉了 include stdafx.h incl...
全排列遞迴實現
一 遞迴版本 1 演算法簡述 簡單地說 就是第乙個數分別以後面的數進行交換 e g e a b c 則 prem e a.perm b,c b.perm a,c c.perm a,b 然後a.perm b,c ab.perm c ac.perm b abc acb.依次遞迴進 好了,知道演算法之後就...