今天花了一段時間才理解for迴圈內嵌遞迴的執行機理,看了部落格其中決定加上自己的一些理解。
首先看**`
void recur(int i,int n)//遞迴呼叫完,for迴圈還要繼續呼叫,假設for迴圈n次,遞迴執行m次,則一共要呼叫nm次!
//也就是說,每for迴圈一次,要呼叫所有的遞迴一遍;for迴圈n次,要呼叫所有的遞迴n遍。而如果所有的遞迴有m次,則總共就是n*m次
}
在程式的注釋已經寫了一下理解。每迴圈一次,就要呼叫所有的遞迴執行一遍,所有有nm次。程式的輸出結果使
這個for迴圈內嵌遞迴經常用於排列組合,例如字串裡字元的各種排列
題目描述
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
vector
permutation(string str)
void permutate(vector
& array, string str, int begin)
for(int i=begin;i<=str.size()-1;i++)
swap(str[i],str[begin]);
permutate(array,str,begin+1);
swap(str[i],str[begin]);}}
遞迴實現排列組合
置換 給定n大於等於1個元素的集合,列印這個集合所有可能的置換。我們通過觀察集合,得到生成所有置換的簡單演算法,以下是演算法的構造過程 1 a跟在 b,c,d 的所有置換之後。2 b跟在 a,c,d 的所有置換之後。3 c跟在 a,b,d 的所有置換之後。4 d跟在 a,b,c 的所有置換之後。in...
排列 組合 遞迴 搜尋
1 給乙個字串,輸出它的全排列 思想 遞迴,先考慮第乙個位置能出現的所有字元,然後遞迴考慮第二個位置能出現的字元.include include includeusing namespace std void permutation char pstr,char pbegin int main 用模...
排列組合及遞迴
置換 substitution 將n個事物按順序進行排列,記作p n為上下角標 n!排列 permutation 從n個事物中取出一部分進行排列,記作p n為下角標,k為上角標 n n 1 n k 1 n!n k 組合 combination 不考慮順序 先順序計數,再除重複度 記作c n為下角標,...