首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Peter Norvig人工智能编程范例中的练习1.2

Peter Norvig人工智能编程范例中的练习1.2
EN

Stack Overflow用户
提问于 2015-05-20 19:14:47
回答 1查看 201关注 0票数 2

在Peter的人工智能编程范例的练习1.2中,读者被要求

编写一个函数进行指数运算,或将一个数字提高到整数幂。例如:(电源3 2) = 3^2 = 9。

所提供的解决办法是:

代码语言:javascript
复制
  (defun power (x n)
    (cond ((= n 0) 1)
          ((evenp n) (expt (power x (/ n 2)) 2))
          (t (* x (power x (- n 1))))))

这当然是对的。现在我觉得有点愚蠢,但他不是在使用他实现的函数的内置版本吗?为什么我要使用power实现expt?或者exptpower的区别是什么?

EN

回答 1

Stack Overflow用户

发布于 2015-05-20 19:23:32

看起来,他只在最简单的情况下使用这个数字,而不是所有的一般情况。这可能是因为这本书的早期,他还没有教过如何绑定局部变量,所以他不想写:

代码语言:javascript
复制
(defun power (x n)
  (cond ((= n 0) 1)
        ((evenp n)
         (let ((temp (power x (/ n 2)))
           (* temp temp)))
        (t (* x (power x (- n 1))))))

它不能使用(power (power x (/ n 2)) 2),因为这将导致无限递归。尽管可以通过添加另一个基本案例来解决这个问题:

代码语言:javascript
复制
(defun power (x n)
  (cond ((= n 0) 1)
        ((= n 2) (* x x))
        ((evenp n) (power (power x (/ n 2)) 2))
        (t (* x (power x (- n 1))))))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30358487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档