程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 遞歸函數的深入理解,很多人的理解誤區,遞歸深入理解

遞歸函數的深入理解,很多人的理解誤區,遞歸深入理解

編輯:C++入門知識

遞歸函數的深入理解,很多人的理解誤區,遞歸深入理解


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

#include<iostream>
using namespace std;
void bin(const unsigned int &i)
{
    
    if (i/2)
        bin(i/2);
    cout << i%2;
}

int main()
{
    int a;
    cin >> a;
    bin(a);
    cout << endl;
    return 0;
}
這是一個求一個數的二進制的程序,
對於這樣的遞歸函數大家肯定不陌生,但是相信很多人還是不清楚它的執行過程吧,或者誤以為自己想的是對的,下面我將為大家解答:
      遞歸函數是如何結束的呢?就是遞歸函數結束的標志,在本程序中,遞歸函數結束的標志就是if(i/2)為假,
則遞歸函數結束。
      程序執行是這樣的,如果傳進來的數是6,那麼第一次if()判斷為真,則執行bin(i/2),執行完後還會執行cout << i%2;不過這一句只是將它入棧了,不會在屏幕上面輸出,這樣才是遞歸函數第一次進行遞歸,第二次進入的時候會把第二次的cout << i%2;入棧,以此類推,直到當判斷到if()為假的時候,這時遞歸才會結束,此時開始出棧,棧是先進後出,所以才是先輸出最後執行的cout << i%2;
       很多人都認為第一次執行bin()的話就不會執行cout << i%2;了,這樣的理解是錯誤的,因為遞歸就是在反復地調用函數本身,調用函數就是一個入棧的過程,如果實在不理解的話大家可以把程序反匯編一下看下編譯器執行的過程就知道了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved