C++编译器的递归深度与程序优化思考
来源:互联网 发布:windows whistler镜像 编辑:程序博客网 时间:2024/05/16 11:20
递归算法具有程序容易编写的特点;然而,由于编译器预分配堆栈空间的限制,递归深度并不是无限制的。
在递归过程中,系统将对当前程序运行状态保存(压入堆栈),并将参数压栈,然后递归。
在递归完成后,则做出栈操作。
当递归深度很深时,由于堆栈满,递归无法继续。
那么,递归深度到底是多少呢?如果我们创建无参数传递的递归,是否会更节省内存,从而,加大递归深度呢?
程序:测试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;}
从上述程序似乎可以看出,在确定的编译器及编译参数下,不同参数传递方式似乎对递归深度没有太大影响。
问题:到底是编译器对递归深度有限制?还是内存不够用了?
结果:递归算法应慎用!
- C++编译器的递归深度与程序优化思考
- 编译器与程序优化
- 被忽略的C编译器递归内存优化
- 程序优化的思考
- C++模板递归深度的思考
- C++--观察各种表达式与编译器使用的优化技巧
- C语言深度解剖之——编译器的bug、for循环优化
- 一段递归程序的思考(全排列)
- 编译器对程序的优化过程
- 尾递归以及编译器优化
- 尾递归和编译器优化
- 对于深度与广度的思考
- 信息安全的深度与广度思考
- C编译器剖析_1.1_ 语言、文法与递归
- C编译器剖析_1.1_ 语言、文法与递归
- C++程序栈与尾递归优化
- Java虚拟机的即时编译与C/C++的静态优化编译器比较
- C 编译器优化(1)
- installing GMT under cygwin
- android主机IP
- 基于SSE指令集的程序设计简介
- 命令行和Eclipse 2种方式实现对APK的签名与APK文件优化
- Install FORTRAN Compiler for Cygwin
- C++编译器的递归深度与程序优化思考
- cygwin安装gamit错误————cannot find -lshell32
- Solaris10配置SSH、Telnet、ftp中root用户登录
- GTK2.0实现的贪吃蛇游戏(一)
- html5绘图铺满整个屏幕
- 软件工程过程及面向对象设计总结
- STL源码阅读 -- basic_string
- Uva 10533 - Digit Primes
- 文件存储