遞迴函式的深入理解,很多人的理解誤區

2021-09-06 19:53:11 字數 671 閱讀 7728

很久沒時間發筆記了,這次抽空 sky(我的暱稱) 再為大家講解乙個東東,講的不好之處大神勿噴哈

#include

using namespace std;

void bin(const unsigned int &i)

int main()

這是乙個求乙個數的二進位制的程式,

對於這樣的遞迴函式大家肯定不陌生,但是相信很多人還是不清楚它的執行過程吧,或者誤以為自己想的是對的,下面我將為大家解答:

遞迴函式是如何結束的呢?就是遞迴函式結束的標誌,在本程式中,遞迴函式結束的標誌就是if(i/2)為假,

則遞迴函式結束。

程式執行是這樣的,如果傳進來的數是6,那麼第一次if()判斷為真,則執行bin(i/2),執行完後還會執行cout << i%2;不過這一句只是將它入棧了,不會在螢幕上面輸出,這樣才是遞迴函式第一次進行遞迴,第二次進入的時候會把第二次的cout << i%2;入棧,以此類推,直到當判斷到if()為假的時候,這時遞迴才會結束,此時開始出棧,棧是先進後出,所以才是先輸出最後執行的cout << i%2;

很多人都認為第一次執行bin()的話就不會執行cout << i%2;了,這樣的理解是錯誤的,因為遞迴就是在反覆地呼叫函式本身,呼叫函式就是乙個入棧的過程,如果實在不理解的話大家可以把程式反彙編一下看下編譯器執行的過程就知道了。

歡迎與本人交流

深入理解遞迴

以此類推是遞迴的基本思想。具體來講就是把規模大的問題轉化為規模小的相似的子問題來解決。在函式實現時,因為解決大問題的方法和解決小問題的方法往往是同乙個方法,所以就產生了函式呼叫它自身的情況。另外這個解決問題的函式必須有明顯的結束條件,這樣就不會產生無限遞迴的情況了。遞迴的兩個條件 遞迴演算法的一般形...

深入理解遞迴

以此類推是遞迴的基本思想。具體來講就是把規模大的問題轉化為規模小的相似的子問題來解決。在函式實現時,因為解決大問題的方法和解決小問題的方法往往是同乙個方法,所以就產生了函式呼叫它自身的情況。另外這個解決問題的函式必須有明顯的結束條件,這樣就不會產生無限遞迴的情況了。遞迴的兩個條件 1 可以通過遞迴呼...

深入理解遞迴

遞迴例子 includevoid up and down int int main void void up and down int n level 1 1 location 0022ff10 level 2 1 location 0022fef0 level 3 1 location 0022f...