c語言演算法之遞歸,遞歸其實很簡單
遞歸c語言演算法里算是比較基礎的,但是很多初學者都未必能夠很好掌握,如果沒有很好理解,熟練使用都是問題。下面我們一起來看看遞歸。
1.遞歸概念
c語言允許一個函數調用本身,遞歸函數即自調用函數,在函數體內部自己調用自己。
比如,下面的程序求1...n的和:
2.遞歸的調用機制
正如上述所說,遞歸是自己調用自己,只是不同的是,被調函數雖然和運行的函數是一個代碼體,但是因為調用點不同,調用時的狀態不同,返回點不同,因此可以看為是函數的副本,我們就可以把他們看為兩個函數,他們是獨立的。
發生函數調用時,被調用函數中保護了調用函數的運行環境和返回地址,使得函數的狀態可以在被調函數運行返回後完全恢復。從該點我們也可以看出,調用函數和被調函數內的數據也是無關的,畢竟都臨時存放在不同的地址上。
函數之間靠參數傳遞和返回值來聯繫,函數內部完全就是一個黑盒子。
想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙
3.遞歸調用形式
遞歸調用有直接遞歸調用和間接遞歸調用兩種形式。
3.1直接遞歸就是在函數中出現調用。比如上面的函數實例,或者著名的求斐波那契數列第n項
3.2間接遞歸調用:是指在函數中調用了別的函數,在別的函數中有調用了本函數。看下面的一個實例吧:
4.善用遞歸:
使用遞歸有利有弊,有點自然是為某些問題提供了簡單的解決辦法,同時,代碼看起來也很簡潔;而缺點也不容忽視,很多遞歸會很快耗盡計算機的內部資源。分分鐘電腦死機。
正因為如此,很多遞歸我們都可以使用非遞歸來代替,比如下面我們求兩個整數的最大公約數:
5.結束語
現在的程序設計追求的就是可讀性好,遞歸的演算法看起來簡潔。隨著計算機性能的不斷提高,程序在更多的場合是優先考慮可讀性,因此,如果可以,鼓勵使用遞歸優先實現程序思想。
每天進步一點點,每天消化一點點。如果你有更高的想法,歡迎一起交流。如果覺得文章寫得還不錯,點個讚唄。
想要一起學習C++的可以加裙六二六八七一九一六,裙內有各種資料滿足大家,歡迎加裙


※C語言C加加網路編程總結
※C加加中命名空間的五大常見用法
※2017年C加加就業前景分析
※C加加編程中容易遇到的幾個問題
TAG:C加加 |
※c 和 Python 實現歸併排序(遞歸,非遞歸)
※谷歌提出「超大數相乘」演算法,量子版遞歸有望成真!
※看動畫輕鬆理解「遞歸」與「動態規劃」
※技術的遞歸結構
※如何在使用 scp 命令時遞歸地排除文件
※可視化遞歸——你所不知道的Python之美
※遞歸、歸併排序,master公式
※一個長期被誤會的問題,這下說清楚了——迭代與遞歸的性能
※php 遞歸刪除目錄下的文件
※關於遞歸的有趣漫畫
※在Python程序中設置函數最大遞歸深度
※人工智慧時代:什麼是遞歸神經網路
※德羅斯特效應是一個荷蘭語辭彙,描述了一種特殊類型的遞歸圖片
※ICLR19高分論文:為思想「層次」建模,遞歸推理讓AI更聰明
※遞歸函數及匿名函數配合內置函數的使用
※基於遞歸神經網路的張量流時間序列分析
※離子吸氣式電動發動機,遞歸神經網路,人造流星雨,短時爆發活動
※遞歸:夢中夢 Linux 中國
※遞歸皮層網路RCN識別文本CAPTCHAS的Science論文基礎知識和譯文
※世界上最大的「遞歸」島,島中之湖中之島中之湖中之島,無奇不有