看到了這麼乙個面試的問題,我能想到的就是,隨機選擇標桿。
但是看了看網上的說法,好像是要牽扯到乙個叫做:尾遞迴的概念
顧名思義,尾遞迴就是從最後開始計算, 每遞迴一次就算出相應的結果, 也就是說, 函式呼叫出現在呼叫者函式的尾部, 因為是尾部, 所以根本沒有必要去儲存任何區域性變數. 直接讓被呼叫的函式返回時越過呼叫者, 返回到呼叫者的呼叫者去。尾遞迴就是把當前的運算結果(或路徑)放在引數裡傳給下層函式,深層函式所面對的不是越來越簡單的問題,而是越來越複雜的問題,因為引數裡帶有前面若干步的運算路徑。
從斐波那契的題,看看尾遞迴:
普通遞迴,非常直觀
int fibonaccirecursive(int n)
尾遞迴
int fibonaccitailrecursive(int n,int ret1,int ret2)
感受一下區別,在快排中,就沒簡單理解了。
先這樣吧。。感覺暫時看不完了
快速排序 的 尾遞迴優化 詳細分析
void qsort int arr,int low,int high 尾遞迴詳細介紹 尾遞迴概念 如果乙個函式中所有遞迴形式的呼叫都出現在函式的末尾,當遞迴呼叫是整個函式體中最後執行的語句且它的返回值不屬於表示式的一部分時,這個遞迴呼叫就是尾遞迴。尾遞迴函式的特點是在回歸過程中不用做任何操作,這個...
尾遞迴優化
尾遞迴就是遞迴語句在函式最後執行,且無需對返回值進行進一步操作。編譯器會對這種遞迴進行優化,在進入深層遞迴時候,不是在遞迴棧進行入棧操作,而是直接覆蓋棧頂。線性遞迴與尾遞迴區別如下 線性遞迴 1 2 3 4 5 longrescuvie longn 尾遞迴 1 2 3 4 5 6 7 8 9 10 ...
尾遞迴優化
什麼是尾遞迴 尾遞迴就將遞迴呼叫寫在函式的尾部return 尾遞迴的好處 解決傳統遞迴的棧溢位問題 尾遞迴適合的業務場景 1.需要遞迴優化的函式沒有用timeout等非同步佇列進行遞迴呼叫函式自己 2.需要遞迴優化的遞迴函式的返回值不是每次都返回,而是條件性返回 尾遞迴優化後的遞迴demo meth...