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)
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值