;;;求最大公约数gcd(a,b)
;;; 用scheme实现
;;;(gcd 9 12) => (gcd 12 9) => (gcd 9 3) => (gcd 3 0) => 3
(define (gcd a b)
(if(= b 0)
a
(gcd b (mod a b))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; // a, b >= 0
;;; Type gcd ( Type a, Type b)
;;; { if ( b == 0)
;;; return a;
;;; else
;;; gcd ( b, a % b);
;;; }
;;;
;;;// a, b 的最小公倍数 = ( a * b ) / gcd ( a, b )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
附:
1. mod 的定義:
(define ( mod x y )
(if ( < x y )
x
( mod (- x y) y )))
2. 運行示意圖
阅读(1748) | 评论(0) | 转发(0) |