一、什么叫做遞歸?
一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法;
遞歸函數就是直接或間接調用自身的函數,也就是自身調用自己;
int fun(int x) { if(x>1) return x+fun(x-1); else return x; } main() { int sum; sum=fun(100); }
二、一般什么時候使用遞歸?
遞歸時常用的編程技術,其基本思想就是“自己調用自己”,一個使用遞歸技術的方法即是直接或間接的調用自身的方法。遞歸方法實際上體現了“以此類推”、“用同樣的步驟重復”這樣的思想,它可以用簡單的程序來解決某些復雜的計算問題,但是運算量較大。
還有些數據結構如二叉樹,結構本身固有遞歸特性;此外,有一類問題,其本身沒有明顯的遞歸結構,但用遞歸程序求解比其他方法更容易編寫程序,如八皇后問題、漢諾塔問題等。
正因為遞歸程序的普遍性,我們應該學會使用遞歸來求解問題。直接遞歸程序與間接遞歸中都要實現當前層調用下一層時的參數傳遞,並取得下一層所返回的結果,並向上一層調用返回當前層的結果。至於各層調用中現場的保存與恢復,均由程序自動實現,不需要人工干預。因此,在遞歸程序的設計中關鍵是找出調用所需要的參數、返回的結果及遞歸調用結束的條件。
如在階乘函數Fact(n)中,各層要求傳遞一個自然數n,返回n* Fact(n-1),遞歸調用結束的條件是n=0;據此,可以方便地寫出它的對應程序