在我看來,遞迴彷彿就是多層迴圈(或者是迴圈層數可變)的替身,就比如我要寫乙個15層的迴圈,不能乙個乙個for迴圈寫下去吧 ,而是需要找到裡邊的規律,然後只改變呼叫函式的引數,就可以實現那個15層迴圈了
下邊簡單的以排列和組合兩個問題來總結一下遞迴的實現思想:
1.實現n個數的排列
今天想暴力解決乙個問題,想找到所有排列的情況,於是學習一下:**如下(摘自
public
static
void
permutation(string s, int ia, int n)
} else
}permutation(ss, ii, n-1);}}
}
組合思想為:
1.在n個數中選出1個數,有n中選法
2.在**剩下的**n-1個數中選出1個數,有n-1種選法
3.在**剩下的**n-2個數中選出1個數,有n-2種選法
…… n-1.在剩下的2個數中選出1個數
n.在剩下的1個數中選出1個數
於是可以發現,這些步驟是有規律的,可以使用遞迴;那麼遞迴結束條件就是當剩下的數只有乙個時結束
分析從含有m個數的陣列中選出乙個數:
int array=new
int[n];
for(j=0;i0]=a[j];
}
那麼剩下的陣列為:
int array1=new
int[n-1];
for(int i=0,k=0;iif(i!=j)
結束條件為:
if(n==1);
2.實現從陣列中選取n個數的排列public
static
void
combination(string s, int ia, int n)
} else
combination(ss, ii, n-1);}}
}
覺得有點難消化,還是要好好看看……………………………….. 大膽投資自我
不要放棄學生時代所學。大概很多人會說 大學裡學的東西,對現在的工作一點幫助都沒有。如果因此就將從前所學拋諸腦後,是很可惜的。人不太可能一輩子都做同乙個工作,持續花心力在學生時代所學的學科上,非但不是浪費,在轉職時反而能增加選擇的機會。柔性思考,多角度閱讀。現今職務有細分化的趨勢,在高度專業化之下,大...
大膽使用指向成員函式的指標
大膽使用指向成員函式的指標 指向成員函式的指標是c 中比較複雜的語法結構,然而,它卻是事件驅動和多執行緒環境中不可缺少的,特別是當從外部呼叫成員函式的時候。在多執行緒裡,每乙個執行緒都通過指向成員函式的指標呼叫這一函式。如果c 沒有這些語法特性,那麼在很多情況下進行c 程式開發會遇到很多麻煩。也許你...
大膽的投資自我
大膽的投資自我 不要放棄學生時代所學。大概很多人會說 大學裡學的東西,對現在的工作一點幫助都沒有。如果因此就將從前所學拋諸腦後,是很可惜的。人不太可能一輩子都做同乙個工作,持續花心在學生時代所學的學科上,非但不是浪費,在轉職時反而能增加選擇的機會。柔性思考,多角度閱讀。現今職務有細分化的趨勢,在高度...