码迷,mamicode.com
首页 > 其他好文 > 详细

SICP 计算机程序的构造和解释 1.16 迭代法对数计算B的N次方

时间:2015-01-20 09:02:53      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:sicp   lisp   迭代   scheme   java   



1.16 迭代法计算B的N次方

先是Java实现的递归法和迭代法:

public class Test {
    public static void main(String args[]){
        int ex,ey;
        ex = expt(122,4);
        ey = expt_iter(122, 4, 1);
        System.out.println(ey);
        System.out.println(ex);
    }
    //递归
    static int expt(int b,int n){
        int sum;
        if(n == 0)
            return 1;
        else
        {
            sum = (expt(b,(n-1)))*(b);
            return sum;
        }
    }
    //迭代
    static int expt_iter(int b, int counter,int product){
        int sum;
        if(counter == 0){
            return product;
        }
        else
        {
            sum = expt_iter(b, (counter-1), (b*product));
            return sum;
        }
    }
}


再是Scheme的对数迭代:

#lang racket

;;N是偶数:b^n = (b^(n/2))^2
(define (square x) (* x x));定义乘积函数
(define (fast-expt b n);筛选
  (expt-iter b n 1))
(define (expt-iter b n a)
  (cond ((= n 0) a);当n= 0,值为1
       ((even? n)(expt-iter (square b)(/ n 2) a));判断是否为偶数
  ((odd? n)(expt-iter b (- n 1)(* b a)))));判断是否为奇数
(define (even? n)
  (= (remainder n 2) 0))
(fast-expt 2 15)
;;N是奇数:b^n = b*b^(n-1)




SICP 计算机程序的构造和解释 1.16 迭代法对数计算B的N次方

标签:sicp   lisp   迭代   scheme   java   

原文地址:http://blog.csdn.net/p641290710/article/details/42886283

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!