【SICP练习】24 练习1.30



练习1.30

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

a—(next a)

other—(+ (term a) other)

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

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

(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))

时间: 2024-10-31 16:16:16

【SICP练习】24 练习1.30的相关文章

python之删除30天以前的文件

用户微信目录因常年累月用户上传图片较多,造成硬盘资源将耗尽,但客户要求至少保存一个月的文件, 然而几十万张图片的文件夹,不论是打开,排序删除都是非常消耗服务器性能的,因为装载这10多个G的文件必然会造成内存和CPU的 大量消耗,因此写了python脚本来自动删除30天以前的文件 代码如下 #-*- coding:utf-8 -*- import os import time import datetime f = list(os.listdir('G:\\qtp')) for i in rang

30、输出九九口诀乘法表

输出九九口诀乘法表 程序代码: /* 时间:2017年6月30日20:02:22 程序功能:输出九九乘法口诀表: 程序目的:理解多层for嵌套的执行流程: */ # include <stdio.h> int main (void) { int x = 0, i, j; for(i=1; i<10; i++) { for(j = 1; j <= i; j++ ) { x = i*j; printf(" %d*%d=%-3d", j, i, x); //j的值始终

Video for Linux Two API Specification revision0.24【转】

转自:http://blog.csdn.net/jmq_0000/article/details/7536805#t136 Video for Linux Two API Specification Revision 0.24 Michael H Schimek <[email protected]> Bill Dirks Hans Verkuil Martin Rubli Copyright © 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,

datetime处理日期和时间(2017.9.30)

1.datetime.now() # 获取当前datetimedatetime.utcnow() 2.datetime(2017, 5, 23, 12, 20) # 用指定日期时间创建datetime 代码如下: from datetime import datetime now=datetime.now() print('当前时间:',now) utcnow=datetime.utcnow() print('世界标准时间:',utcnow) dt=datetime(2017, 5, 23, 1

嵌入式软件设计第11次实验报告

学号:140201126             姓名:杨鹏飞 组别:第2组                实验地点:D19 一.实验目的: 1.了解短信AT指令的使用方法. 2.掌握使用短信AT指令驱动SIM900A发送和接收短信的方法. 二.实验内容: 1.使用AT命令进行模块测试,发送和接收短信. 2.编写程序利用触摸屏完成固定号码短信的发送和接收.(需要加上AT测试命令模块.手机SIM卡检测模块.手机信号质量检测模块等等.) 三.实验过程描述及结果展示: 短信常用AT指令 程序代码: #

gdb调试命令

本篇摘自互联网,纯属自己学习笔记,然分享给看到我的博客的人们. 用GDB调试程序 GDB是一个强大的命令行调试工具.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本.UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能. 于是UNIX下的软件比Windows下的软件更能有机地结合,各自发挥各自的长处,组合成更为强劲的功能.而Windows下的图形软件基本上是各自为营,

HTTP协议:(3)HTTP响应和相关API、案例

1.HTTP响应的知识 1.1.HTTP响应的示例 HTTP响应由四部分组成:响应行.响应头.一个空行和实体内容. HTTP响应的组成: |--响应行 |--响应头 |--(一个空行) |--实体内容 HTTP响应示例:     HTTP/1.1 200 OK                --响应行     Server: Apache-Coyote/1.1      --响应头(key-vaule)     Content-Length: 24     Date: Fri, 30 Jan 2

Cookie和Session

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向

Linux GDB程序调试工具使用简介

GDB概述 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像VC.BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.所谓"寸有所长,尺有所短"就是这个道理. 一般来说,GDB主要帮忙你完成下面四个方面的功能: 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序. 可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式) 当程序被停住时,