首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

sicp练习题1.17 只有加减法 实现快速求幂

2012-12-28 
sicp练习1.17 只有加减法 实现快速求幂double的功能是2*n(define (double n)(+ n n))(double 5)*函数的

sicp练习1.17 只有加减法 实现快速求幂

;double的功能是2*n(define (double n)  (+ n n))(double 5);*函数的功能是a乘以b(define (* a b)  (if (= b 0)      0      (+ a (* a (- b 1)))))(* 3 4);havle-iter函数的功能是通过迭代获得n的一半的值,guess是初始猜测值(define (havle-iter guess n)  (cond ((not (integer? n)) (display "error: 原因havle函数的参数是整数\n"))        (( and (< (double guess) n) (<= (double (+ guess 1)) n)) (havle-iter (+ 1 guess) n))        (( and (> (double guess) n)) (havle-iter (- guess 1) n))        (( and (< (double guess) n) (> (double (+ guess 1)) n)) (+ guess 0.5))        ((= (double guess) n) guess)));havle函数的功能是通过迭代获得n的一半的值,guess是初始猜测值是1(define (halve n)  (havle-iter 1 n))(halve 16)(halve 37)(halve 35.5);even?函数功能是判断n是否是偶数,如果是偶数值为#t,否则为#f(define (even? n)  (cond ((= n 0) #t)        ((= n 1) #f)        ((and (integer? n) (< n 0)) (even? (+ n 2)))        ((and (integer? n) (> n 1)) (even? (- n 2)))        (else #f)))(even? 13)(even? 22)(even? 22.5);square函数的功能是得到n的平方,如果是非零正偶数则递归计算4倍二分之n的平方(define (square n)  (cond ((= n 0) 0)        ((< n 0) (square (- 0 n)))        ((and (> n 0) (even? n)) (double (double (square (halve n)))))        ((> n 0) (+ (square (- n 1)) (double (- n 1)) 1))))(square 7)(square 12)(define (fast-expt b n)  (cond ((= 0 n) 1)        ((even? n) (fast-expt (square b) (halve n)))        (else (* b (fast-expt b (- n 1))))))(fast-expt 2 10)
?

热点排行