設str是含有n個不同字元的陣列例如12345,perm(str,k,n)為str[0]~str[k]的所有字元全排序輸出函式,n為str陣列字元個數。以此類推,perm(str,k-1,n)處理的字元個數比perm(str,k,n)處理的字元個數少乙個。假定perm(str,k-1,n)可求,對於第k個位置可以任取str[0]~str[k-1]內任意元素作為str[k],再組合perm(str,k+1,n)得到perm(str,k,n)。
再遞迴之前先選取乙個元素和位置k的元素交換,這一級遞迴完成之後,再把元素交換回來,保證初始元素順序不改變,以實現所有字元都能在位置k上完成一次遞迴。
由此可以寫出一下**:
void perm(int
str,int k,int n)
}}
遞迴實現n個不同字元的所有全排列
設str是含有n個不同字元的陣列例如含123,perm str,k,n 為str k str n 1 的所有字元全排序輸出函式。很明顯,perm str,k 1,n 處理的字元個數比perm str,k,n 處理的字元個數少乙個。假定perm str,k 1,n 可求,對於第k個位置可以任取k n ...
遞迴演算法 求序列的全排列
書本 windows程式設計 功能 輸出全部的排列情況 檔案 全排列.cpp include using namespace std 交換兩個元素的函式 templateinline void swap type a,type b 取兩個元素的引用,等會來交換 這個是乙個遞迴為了輸出全部的排列情況 ...
對n個不同字母的全排列
public class liang public static boolean visit new boolean str.length public static char result new char str.length public static int total 0 public s...