解釋一:
函數的嵌套調用是在函數調用中再調用其它函數,函數的遞歸調用是在函數調用中再調用該函數自身。
解釋二:
函數嵌套是語言特性,遞歸調用是邏輯思想。
函數嵌套允許在一個函數中調用另外一個函數,比如有三個函數:
func1()
{
func2();
}
func2()
{
func3();
}
func3()
{
printf("Hello");
}
這個就叫做嵌套調用,它是一個語言提供的程序設計的方法,也就是語言的特性。
而遞歸,是一種解決方案,一種思想,將一個大工作分為逐漸減小的小工作,比如說一個人要搬50塊石頭,他想,只要先搬走49塊,那剩下的一塊就能搬完了,然后考慮那49塊,只要先搬走48塊,那剩下的一塊就能搬完了……以此類推的思考,遞歸是一種思想,只不過在程序中,就是依靠函數嵌套這個特性來實現了。
遞歸最明顯的特點就是,自己調用自己(就是函數嵌套調用)。如下例
funca()
{
if(statement1)
funca();
else
exit(0);
}
概括說,函數嵌套就是函數調用函數,是普遍的,遞歸就是函數調用自身,使函數嵌套的一個特例。
遞歸的作用:
遞歸做為一種算法在程序設計語言中廣泛應用.是指函數/過程/子程序在運行過程序中直接或間接調用自身而產生的重入現象.
遞歸是一個函數在其定義中又直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合。用遞歸思想寫出的程序往往十分簡潔易懂。
一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。
注意:
(1) 遞歸就是在過程或函數里調用自身;
(2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。
遞歸算法一般用於解決三類問題:
(1)數據的定義是按遞歸定義的。(Fibonacci函數)
(2)問題解法按遞歸算法實現。(回溯)
(3)數據的結構形式是按遞歸定義的。(樹的遍歷,圖的搜索)