zoukankan      html  css  js  c++  java
  • 【SICP练习】13 练习1.19

    

    练习1.19

    题目中说道斐波那契数中将变换Tn次方应用于对偶(10)而产生出来,而现在将T看作T(pq)p=0q=1的特俗情况。因此对于对偶(ab)来说,a—bq+a(p+q)b—bp+aq。而对于T(pq)的平方也就是(T(pq))^2,就像之前的a中往b乘以q和往a乘以(p+q),现在依旧是相当于a中往bp+aq乘以qbp+aq为上一次迭代中的”b”),往(bq+a(p+q))中乘以(p+q),同样的变换也发生在b中。依次对于T(pq)的平方来说,a—b(2pq+q*q)+a(p*p+q*q+2*p*q+q*q)b—b(p*p+q*q)+a(2pq+q*q)

    而再次通过对比我们发现p’=p^2+q^2并且q’=2pq+q^2

    所以当N为偶数时,我们又可以通过应用变换T(p’q’)来减少计算T^N的一半计算量,因此在这种情况下就可以写出对数步数的斐波那契函数了。代码如下:

    (define(fib n)

       (define (fib-iter a b p q n)

        (cond ((= n 0) b)

              ((even? n) (fib-iter a b (+ (squarep) (square q)) 

                                (+(* 2 p q) (square q)) (/ n 2)))

              ((odd? n) (fib-iter (+ (* b q) (* aq) (* a p))

                          (+ (* b p) (* a q)) p q(- n 1)))))

    (fib-iter 1 0 0 1 n))

    再来一次测试:

    (fib 0)

    ;Value: 0

    (fib 7)

    ;Value: 13

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

  • 相关阅读:
    DeepLearning之路(三)MLP
    DeepLearning之路(二)SoftMax回归
    DeepLearning之路(一)逻辑回归
    自然语言处理工具
    一个 11 行 Python 代码实现的神经网络
    对联广告
    Java多线程
    QT数据库操作
    QT笔记
    C++基础入门
  • 原文地址:https://www.cnblogs.com/NoMasp/p/4786217.html
Copyright © 2011-2022 走看看