这个小节主要讲解了迭代与树形递归,递归比起迭代更易于理解和直观,而迭代相比于递归则效率更高,一般计算机的递归实现都是使用堆栈结构实现的,当递归层次太深的时候容易导致栈溢出,而迭代则没有这样的问题。
习题1.11是这样的: 如果n<3,那么f(n)=n;如果n>=3,那么f(n)=f(n-1)+2f(n-2)+3f(n-3),请写一个采用递归计算过程f的过程,再改写一个采用迭代计算过程计算f的过程。解答:
1.采用递归的话就很简单了,可以将条件直接描述为一个lisp过程,没什么好解释的:
<!---->(define (f n)
(if (< n 3)
n
(+ (f (- n 1)) (* 2 (f (- n 2))) (* 3 (f (- n 3))))))
2。迭代就相对麻烦点,将递归转化为迭代,关键在于找出迭代每一步之间的差异,这个差异就是每次迭代变化的量,找出这个固定编号的量就是问题的关键。很容易就可以看出f(n)和f(n-1)之间的差距就是:2f(n-2)+3f(n-3)。这就提示我们需要保持3个顺序的状态变量:f(n-2)、 f(n-1) 、f(n),迭代向前一步的时候:f(n-2)被f(n-1)取代,f(n-1)被f(n)取代,将f(n)+2f(n-2)+3f(n-3)做为新的f(n)。迭代是自底向上,初始化的3个变量就是0、1、2,这样就可以相应地写出一个迭代版本的解答:
<!---->(define (f-iter a b c n)
(if (= n 2)
c
(f-iter b c (+ c (* 2 b) (* 3 a)) (- n 1))))
(define (f-i n) (f-iter 0 1 2 n))
可以测试一下,在n数目比较大的时候,递归版本速度明显变慢甚至栈溢出,而迭代版本就比较快了。
习题1.12:用递归过程描述帕斯卡三角(或者说杨辉三角)根据杨辉三角的特点,x行y列的数字等于x-1行y列的数字和x-1行y-1列的数字之和,就可以解决这个问题:
<!---->(define (pascal x y)
(cond ((> y x) (display "error"))
((= x 1) 1)
((= x 2) 1)
((= y 1) 1)
((= x y) 1)
(else
(+ (pascal (- x 1) y) (pascal (- x 1) (- y 1))))))
分享到:
相关推荐
《SICP习题解答,主要第一章的内容习题答案》 SICP,全称《Structure and Interpretation of Computer Programs》(计算机程序的构造和解释),是计算机科学领域的一本经典教材,由MIT(麻省理工学院)的 Harold ...
《计算机程序的构造和解释》...通过解答SICP的习题,读者将深入理解这些概念,并能运用到实际的编程实践中。习题旨在促进对这些基本原理的深入思考,帮助程序员建立坚实的基础,进而在面对复杂的编程挑战时能游刃有余。
《SICP(Structure and Interpretation of Computer Programs)》是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,它强调了程序设计的基础和原理,特别是函数式编程思想。第二章主要探讨了...
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download>>>https://github.com/wizardforcel/sicp-py-zh
SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版
《SICP解题集》是一份专注于探讨和解答《结构与解释程序》(Structure and Interpretation of Computer Programs,简称SICP)一书中习题的资源。SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay ...
《计算机程序构造和解释》(SICP,Structure and Interpretation of Computer Programs)是一本具有深远影响力的计算机...压缩包中的“SICP 北大课件”文件可能包含课件、讲义、习题解答等资料,是学习SICP的宝贵资源。
《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称SICP)是一本备受推崇的经典计算机科学教材,由Harold Abelson和Gerald Jay Sussman撰写,并由MIT出版社出版。这本书以其深入...
《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...
SICP-Python版本
SICP 使用的scheme解释器 以前叫DrScheme
### SICP——《计算机程序的结构与解释》 #### 一、概述 《计算机程序的结构与解释》(Structure and Interpretation of Computer Programs, 简称SICP)是一本由MIT电气工程与计算机科学系教授Harold Abelson和...
Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用
《SICP》全称是《Structure and Interpretation of Computer Programs》,中文译为《计算机程序的构造和解释》。这是一本经典的计算机科学教材,由Harvard大学的 Harold Abelson 和 Gerald Jay Sussman 教授撰写,...
标题中的"PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz"指的是从Python的官方包索引(Python Package Index,简称PyPI)上下载的一个名为"sicp"的软件包的版本号为0.0.1b102.dev4的压缩文件,其格式是tar.gz。...
本书名为《a_book_sicp_py》,是一本以Python语言为基础介绍设计模式和计算机科学基础的书籍。根据描述和部分内容,可以提炼出以下知识点: 1. 编程语言的重要性:在计算机科学的宽泛领域中,编程语言扮演着至关...
sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh
在" sicp-master "这个压缩包中,可能包含的是对SICP各章节练习题的解答,包括源代码、注释和分析。这些练习通常涵盖了函数式编程的基础,如高阶函数、递归、闭包,以及更高级的主题,如过程构造、数据结构、环境...
《Structure and Interpretation of Computer Programs》(简称SICP)是计算机科学领域的一部经典教材,由Harold Abelson和Gerald Jay Sussman撰写,第二版(2nd Edition)通常被称为SICP 2nd。这本书是麻省理工学院...