`
SavageGarden
  • 浏览: 215609 次
  • 性别: 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的整数

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics