《编程之美》最大公约数问题之循环解法
2012-02-22 15:15
274 查看
编程不仅是实现特定的要求,也应该考虑实现的细节。2.7最大公约数问题提供了三种解法,从执行效率上逐步执行优化。但是书中提供的函数都是采用递归调用方式,如此简单的函数功能采用递归调用未免会产生大量的压栈操作,极大影响程序的效率。下面是我实现的非递归方式:
int gcd(int x, int y) { int factor = 1; while(x != 0 && y != 0) { if(((x & 0x01) || (y & 0x01)) == 0) { factor <<= 1; x >>= 1; y >>= 1; } else if((x & 0x01) && (y & 0x01)) { x > y ? (x = x-y) : (y = y-x); } else { x & 0x01 ? (y >>= 1) : (x >>= 1); } } return factor*(x != 0 ? x : y); }
相关文章推荐
- 《编程之美》求两个大整数的最大公约数问题的一般解法
- 《编程之美》2.7 最大公约数问题解法3改进
- 编程之美2.7 最大公约数问题
- 《编程之美》学而思 - 最大公约数问题
- 《编程之美》——最大公约数问题
- 最大公约数问题的优化解法
- 编程之美-2.7最大公约数问题java解法
- 《编程之美》学习笔记——2.7最大公约数问题
- 最大公约数问题(编程之美2.7)
- 《编程之美》学习笔记之 最大公约数问题
- Java中循环问题:for,while,do-while 各种练习(打印上三角、下三角、输出100以内的素数、水仙花、最大公约、最小公倍数、分解质因数、兔子问题)
- 编程之美 2.7最大公约数问题
- Java:多重循环for、while、do-while(简单判断是否是四位整数、1-100累加,水仙花、最大公约数。最小公倍数、完数、输入任意数计算每位数之和、弹力球问题)
- 编程之美2.7最大公约数问题Java版
- 编程之美——最大公约数问题
- 编程之美之2.7 最大公约数问题
- 数字问题之最大公约数问题全解法归纳<Java实现>
- 编程之美2.7——最大公约数问题
- 编程之美: 第二章 数字之魅 2.7最大公约数问题
- 《编程之美》---精确表达浮点数子问题---辗转相除法求取最大公约数