C++編譯器的遞迴深度與程式最佳化思考

來源:互聯網
上載者:User

遞迴演算法具有程式容易編寫的特點;然而,由於編譯器預分配堆棧空間的限制,遞迴深度並不是無限制的。

在遞迴過程中,系統將對當前程式運行狀態儲存(壓入堆棧),並將參數壓棧,然後遞迴。

在遞迴完成後,則做出棧操作。

當遞迴深度很深時,由於堆棧滿,遞迴無法繼續。

那麼,遞迴深度到底是多少呢?如果我們建立無參數傳遞的遞迴,是否會更節省記憶體,從而,加大遞迴深度呢?

 

程式:測試C++編譯器的遞迴深度

/*測試C++語言的遞迴深度G++結果:F: 43273F1: 43273F2: 43266VC2012結果:F:85588F1:44998F2: 42773*/#include <iostream>using namespace std;int n;int times = 0;void F(){if (n == 1)return;else{cout << times++ << endl;n = n - 1;F();}}void F1(int n){if (n == 1)return;else{cout << times++ << endl;n = n - 1;F1(n);}}typedef struct data {int a, b;} Data;void F2(int n, Data data){if (n == 1)return;else{cout << times++ << endl;n = n - 1;F2(n, data);}}int main(){n = 1e6;//F();//F1(n);Data data;F2(n, data);cout << "end";return 0;}

從上述程式似乎可以看出,在確定的編譯器及編譯參數下,不同參數傳遞方式似乎對遞迴深度沒有太大影響。

問題:到底是編譯器對遞迴深度有限制?還是記憶體不夠用了?

 

結果:遞迴演算法應慎用!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.