递归函数栈溢出问题?
- 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;}