zoukankan      html  css  js  c++  java
  • 【SICP练习】24 练习1.30

    

    练习1.30

    这道题要求将一个递归的规程改成是迭代的,通过对递归版本的sum的观察得出以下变换形式:

    a—(next a)

    other—(+ (term a) other)

    博主英文不太好实在想不出什么好词语了。变换成迭代通俗点讲就是要将sum中最后一行的加号去掉,因为这个是消耗大量空间的根源。

    如果我们将aother作为迭代中的产生,将这个过程展开即有:

    (sum-iter a other)

    (sum-iter (next a) (+ (term a) other))

    (sum-iter (next (next a)) (+ (term (term a))(+ (term a) other)))

    博主就不再一直写下去了,就是按照前面的变换规则做对应变换罢了。

    于是我们便可以完成题中的空缺部分了。

    (define (sum term a next b)

       (define (sum-iter a other)

           (if (> a b)

             other

              (sum-iter (next a) (+ (term a) other))))

       (sum-iter a 0))

    版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

  • 相关阅读:
    dd的用法
    od的用法
    Windows 7安装Oracle 10g的方法
    Ubuntu下的iptux和Windows下的飞秋互传文件
    c++ 12
    c++ 11
    c++ 10
    c++ 09
    c++ 08
    c++ 07
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786206.html
Copyright © 2011-2022 走看看