递归程序设计.pptVIP

  • 43
  • 0
  • 约8.39千字
  • 约 49页
  • 2015-09-24 发布于重庆
  • 举报
递归程序设计

特殊情况处理 一些特殊情况需要处理 1)m和n都为0需特殊处理。令函数返回值0; 2)若m和n中一个为0,gcd是另一个数。函数的返回值正确。也可直接判断处理; 3)m、n为负时函数返回1,可能不对。 应在循环前加语句 if (m == 0 n == 0) return 0; if (m == 0) return n; if (n == 0) return m; if (m 0) m = -m; if (n 0) n = -n; 可能方式2 换个思路 令k从某个恰当的大数开始递减,找到的第一个公约数就是最大公约数。 k初值可取m和n中小的一个。 结束条件 k值达到1或找到了公约数。1总是公约数。 程序主要部分可写为: for (k = (m n ? n : m); //把k设为n的较小者 m % k != 0 || n % k != 0; k--) ; /* 空循环体 */ return k; /*循环结束时k是最大公约数 */ 过程示例 m n k m % k != 0 || n % k != 0 d 20 8 8 是 ? 7 是 ? 6 是 ? 5 是 ? 4 否 4 两种方式比较 本方法比前一方法简单一些。 两种方法的共同点是重复测试。 这类方法的缺点是效率较低,参数大时循环次数很多。 解法2 辗转相除法 求GCD有著名的欧

文档评论(0)

1亿VIP精品文档

相关文档