读书人

递归函数栈溢出有关问题

发布时间: 2012-06-17 21:02:01 作者: rapoo

递归函数栈溢出问题?

C/C++ code
bool isEven(int n){    return (n&&0x01 == 0) ? true : false;    //return (n%2 == 0) ? true : false;}int gcd_3(int m, int n){    if (m > n)        return gcd_3(n, m);    if (m == 0)        return n;    else    {        if (isEven(m))        {            if (isEven(n))                return (gcd_3(m>>1, n>>1) << 1);            else                return gcd_3(m >> 1, n);        }        else        {            if(isEven(n))                return gcd_3(m, n>>1);            else                return gcd_3(m, n-m);        }    }}


代码如上,一个很简单的求最大公约数的问题,编程之美上的一种实现方式。
还有一个更简单的代码是上述的else部分直接换成return gcd_3(m, n-m); 但递归层数过多,会造成栈溢出。
而上述的代码在执行的时候,输入5000和1,也会出现运行错误,数字相差较小时就不会出错,开始我也以为是栈溢出导致的问题,但将isEven函数改写成注释掉的那行,再运行,至少输入5000和1不会再出现运行错误。
请教,原因何在?

[解决办法]
你统计下调用次数吧,或者直接用/stack(VC的话)连接选项改默认栈大小,看是不是能获得更多的调用次数

递归调用的栈问题无解,除非不用递归(工业强度实现的快速排序,没有用递归的)
[解决办法]

C/C++ code
bool isEven(int n){    return ((n & 0x01) == 0) ? true : false;} 

读书人网 >C++

热点推荐