c語言算法之遞歸,遞歸其實很簡單

編程語言 C語言 程序設計 文章 我的IT之旅 2017-06-27

遞歸c語言算法裡算是比較基礎的,但是很多初學者都未必能夠很好掌握,如果沒有很好理解,熟練使用都是問題。下面我們一起來看看遞歸。

1.遞歸概念

c語言允許一個函數調用本身,遞歸函數即自調用函數,在函數體內部自己調用自己。

比如,下面的程序求1...n的和:

c語言算法之遞歸,遞歸其實很簡單

2.遞歸的調用機制

正如上述所說,遞歸是自己調用自己,只是不同的是,被調函數雖然和運行的函數是一個代碼體,但是因為調用點不同,調用時的狀態不同,返回點不同,因此可以看為是函數的副本,我們就可以把他們看為兩個函數,他們是獨立的。

發生函數調用時,被調用函數中保護了調用函數的運行環境和返回地址,使得函數的狀態可以在被調函數運行返回後完全恢復。從該點我們也可以看出,調用函數和被調函數內的數據也是無關的,畢竟都臨時存放在不同的地址上。

函數之間靠參數傳遞和返回值來聯繫,函數內部完全就是一個黑盒子。

3.遞歸調用形式

遞歸調用有直接遞歸調用和間接遞歸調用兩種形式。

3.1直接遞歸就是在函數中出現調用。比如上面的函數實例,或者著名的求斐波那契數列第n項

c語言算法之遞歸,遞歸其實很簡單

3.2間接遞歸調用:是指在函數中調用了別的函數,在別的函數中有調用了本函數。看下面的一個實例吧:

c語言算法之遞歸,遞歸其實很簡單

4.善用遞歸:

使用遞歸有利有弊,有點自然是為某些問題提供了簡單的解決辦法,同時,代碼看起來也很簡潔;而缺點也不容忽視,很多遞歸會很快耗盡計算機的內部資源。分分鐘電腦死機。

正因為如此,很多遞歸我們都可以使用非遞歸來代替,比如下面我們求兩個整數的最大公約數:

c語言算法之遞歸,遞歸其實很簡單

5.結束語

現在的程序設計追求的就是可讀性好,遞歸的算法看起來簡潔。隨著計算機性能的不斷提高,程序在更多的場合是優先考慮可讀性,因此,如果可以,鼓勵使用遞歸優先實現程序思想。

每天進步一點點,每天消化一點點。如果你有更高的想法,歡迎一起交流。如果覺得文章寫得還不錯,點個讚唄。

相關推薦

推薦中...