zoukankan      html  css  js  c++  java
  • SICP练习1.6 1.16 解答

    上一次看SICP没有做习题,这次就慢慢看,慢慢做题了。

    效率比较低,很少抽空看看,这两个题不是一眼就看出结果的,所以写下。

    1.6就是

    cond和if有着同样的效果,为啥用cond实现的new-if不能用于一些函数。

    答:因为new-if定义为函数,scheme的参数是使用的应用序规则,要先求出参数的值,所以再调用new-if的时候predicate the-clause else-clause都要求值,导致递归不能结束,然后stackoverflow。

    1.16用迭代的方法实现fast-exp

    球bn

    我们设置一个变量a,让abn的值保持不变,初始a=1,那么在最后n=0的时候a的值就是bn

    1)若n是偶数   a(b2)n/2

    2)若n是奇数   (ab)bn-1

    Common Lisp代码如下

    (defun even? (x)
      (if (= (mod x 2) 0)
          T
          nil))
    ;;;求a^b
    (defun fast-exp (a b)
      (defun exp-1957 (n m ans)
        (if (= m 0)
            ans
            (if (even? m)
                (exp-1957 (* n n) (/ m 2) ans)
                (exp-1957 n (- m 1) (* ans n)))))
      (exp-1957 a b 1))
    by 1957
  • 相关阅读:
    Codeforces
    Codeforces
    SCUT
    模板
    SCUT
    SCUT
    模板
    SCUT
    UVA 437 "The Tower of Babylon" (DAG上的动态规划)
    UVA 1025 "A Spy in the Metro " (DAG上的动态规划?? or 背包问题??)
  • 原文地址:https://www.cnblogs.com/x1957/p/2660207.html
Copyright © 2011-2022 走看看