`
SavageGarden
  • 浏览: 223168 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SICP学习笔记 1.2.2 树形递归

    博客分类:
  • SICP
 
阅读更多

  练习1.11

   递归过程

 

(define (func n)
  (if (< n 3)
	  n
	  (+
	   (* 1 (func (- n 1)))
	   (* 2 (func (- n 2)))
	   (* 3 (func (- n 3))))))
     

    迭代过程

 

(define (func n)
  (fun-iter 0 1 2 n))
(define (fun-iter a b c count)
  (if (= count 0)
	  a
	  (fun-iter b c (+ (* 1 c) (* 2 b) (* 3 a)) (- count 1))))

 

  练习1.12

 

(define (pasca n i)
  (cond ((= i 1) 1)
		((= i (+ n 1)) 1)
        (else (+ (pasca (- n 1) (- i 1)) (pasca (- n 1) i)))))

 

 

  练习1.13

 

    已知:f(n+1) = f(n) + f(n-1)   (1)

 

    设存在f(n+1) + x*f(n) = y*[f(n) + x*f(n-1)]  (2),则有

    f(n+1) = (y-x)*f(n) + x*y*f(n-1)

    根据(1),则有y-x=1, x*y=1,则有x*(x+1)=1

    此方程有解

    x=(√5-1)/2、y=(√5+1)/2

    则存在等比数列f'(n),其首项为f(2) + [(√5-1)/2]*f(1) = (√5+1)/2,公比为(√5+1)/2

    则f'(n) = [(√5+1)/2]^n,即

    f(n+1) + [(√5-1)/2]*f(n) = [(√5+1)/2]^n   

    f(n+1) = [(1-√5)/2]*f(n) + [(√5+1)/2]^n     (3)

 

    设存在f(n+1) + x*[(√5+1)/2]^(n+1) = [(1-√5)/2]*[f(n) + x*[(√5+1)/2]^n]   (4),则有

    f(n+1) = [(1-√5)/2]*f(n) + [(√5+1)/2]^n*(-√5*x)

    根据(2),则有

    -√5*x=1,则x=-√5/5

    代入(4),得

    f(n+1) - (√5/5)*[(√5+1)/2]^(n+1) = [(1-√5)/2]*[f(n) - (√5/5)*[(√5+1)/2]^n]

    则存在等比数列f''(n),其首项为f(1)- (√5/5)*[(√5+1)/2] = (5-√5)/10,公比为(1-√5)/2

    则f''(n) = [(5-√5)/10]*[(1-√5)/2]^(n-1),则

    f(n)- (√5/5)*[(√5+1)/2]^n = -(√5/5)*[(1-√5)/2]^n

    f(n) = (√5/5)*[(√5+1)/2]^n - (√5/5)*[(1-√5)/2]^n

 

    若有φ=(√5+1)/2、ψ=(1-√5)/2,则有

    f(n)=(φ^n-ψ^n)/√5

    所以 φ^n/√5 = f(n) + ψ^n/√5

    而ψ=(1-√5)/2,-1 < ψ < 0,则-1 < ψ^n < 1,则-√5/5 < ψ^n/√5 < √5/5

    又√5/5 < 1,所以f(n)是最接近φ^n/√5的整数

 

 

分享到:
评论

相关推荐

    sicp-Structure and Interpretation of Computer Programs

    - **1.2.2 树形递归**(Tree Recursion):探讨树形递归的概念及其应用场景。 - **1.2.3 增长阶**(Orders of Growth):分析算法的时间复杂度。 - **1.2.4 幂运算**(Exponentiation):介绍幂运算的不同实现...

    SICP(计算机体系结构)

    - **1.2.2 树形递归**: 探讨一种复杂度较高的递归形式。 - **1.2.3 成长的阶次**: 分析算法的时间和空间复杂度。 - **1.2.4 幂运算**: 实现快速幂运算算法。 - **1.2.5 最大公约数**: 讲解欧几里得算法的应用。 ...

    SICP 解题集

    SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay Sussman和Julie Sussman共同撰写,它以其独特的视角深入浅出地介绍了计算机编程的本质,特别是函数式编程思想和递归算法的设计。 SICP的核心...

    Structure and Interpretation of Computer programs sicp

    - **1.2.2 树递归**: 分析更复杂的递归模式,如树形结构的遍历。 - **1.2.3 成长顺序**: 分析算法的时间和空间复杂度。 - **1.2.4 幂运算**: 讨论幂运算的不同实现方法,包括递归和非递归方式。 - **1.2.5 通用...

    SICP 习题答案

    - **递归数据结构**:如树和图,可以通过递归定义来表示,这在处理层次结构的问题中非常有用。 - **表处理**:SICP介绍了基于链表的表结构,包括表的创建、访问和修改操作,以及表操作的高效实现,如尾递归优化。 ...

    SICP(python中文带书签)

    在Python中实现SICP的概念,可以帮助我们更好地理解函数式编程的精髓,例如高阶函数、闭包、递归以及过程抽象等。Python提供了`lambda`表达式、`map()`、`filter()`和`reduce()`等工具,这些都与Lisp的特性相呼应,...

    sicp in python 中文 sicp 中文

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download&gt;&gt;&gt;https://github.com/wizardforcel/sicp-py-zh

    SICP习题解答,主要第一章的内容习题答案

    本资料集包含了对SICP第一章习题的解答,旨在帮助学习者巩固基础,深化对函数式编程的理解。 首先,让我们关注一下习题解答中的几个关键部分: 1. **1.6.ss**: 这部分可能涉及到函数定义、递归和过程抽象。SICP的...

    sicp 2.2.4节图形语言

    总的来说,SICP 2.2.4节的图形语言不仅是学习Scheme或Racket编程的一个重要部分,更是对计算思维和编程艺术的一次深入探索。通过实践和理解这些概念,你将能更好地理解和创造计算世界中的视觉表现形式。

    Structure Interpration of Computer Programs(英文版)

    - **1.2.2 树形递归**:介绍树形递归的概念,这是一种常见的递归形式,用于解决具有复杂分支结构的问题。 - **1.2.3 成长顺序**:讨论算法效率的衡量标准,即成长顺序或时间复杂度,以及如何分析算法的效率。 - *...

    SICP中文第二版

    SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版

    sicp 2016 from

    - **树形递归 (Tree Recursion)**:探讨了如何通过递归来解决分治类型的问题。 - **增长阶次 (Orders of Growth)**:分析了算法的时间复杂度和空间复杂度。 - **指数运算 (Exponentiation)**:通过实例展示了如何...

    sicp_notes:SICP笔记和练习

    《SICP笔记和练习》是一份详尽的资源,主要涵盖了由MIT教授们编写的经典计算机科学教材《Structure and Interpretation of Computer Programs》(简称SICP)的学习笔记和练习解答。这份资料以HTML格式呈现,便于在线...

    sicp第二章练习题的解答

    3. **递归**:递归是SICP中经常出现的主题,用于解决问题和构建数据结构。学习如何正确地使用递归,避免栈溢出,是编程中的重要技能。 4. **数据结构和抽象**:设计和使用数据结构,比如链表、树、队列等,是程序...

    SICP LISP AI

    4. **数据结构和抽象**:SICP介绍了各种数据结构,如列表、树和队列,以及如何使用递归和高阶函数来操作它们。此外,还讨论了如何通过抽象隐藏实现细节,提高代码的复用性和可维护性。 5. **控制结构和计算的表示**...

    精通递归程序设计

    ### 精通递归程序设计 #### 一、递归程序设计概述 递归是一种在计算机科学中广泛使用的编程技巧,它允许一个函数通过直接或间接的...通过学习这些资源,开发者可以更深入地理解递归的概念及其在实际编程中的应用。

    北京大学,计算机程序构造和解释(SICP)课件,裘宗燕老师主讲

    通过学习SICP,学生将能够理解如何设计、分析和实现复杂的程序系统,培养出强大的抽象思维能力。 课程内容涵盖了以下几个关键知识点: 1. **基本编程概念**:包括变量、数据结构(如列表、树)、控制结构(条件...

    sicp 2nd 英文chm

    2. **递归**:递归是SICP中的关键概念,用于解决各种问题。书中通过递归函数展示了如何表示和处理数据结构,如列表和树。 3. **抽象**:SICP提倡通过创建抽象层来提高代码的可读性和复用性。通过定义新类型和操作,...

    SICP-Python版本

    SICP-Python版本

Global site tag (gtag.js) - Google Analytics