: > *Exercise 1.19:* There is a clever algorithm for computing the
: > Fibonacci numbers in a logarithmic number of steps. Recall the
: > transformation of the state variables a and b in the 'fib-iter'
: > process of section *note 1-2-2::: a <- a + b and b <- a. Call this
: > transformation T, and observe that applying T over and over again n
: > times, starting with 1 and 0, produces the pair _Fib_(n + 1) and
: > _Fib_(n). In other words, the Fibonacci numbers are produced by
: > applying T^n, the nth power of the transformation T, starting with
: > the pair (1,0). Now consider T to be the special case of p = 0 and
: > q = 1 in a family of transformations T_(pq), where T_(pq)
: > transforms the pair (a,b) according to a <- bq + aq + ap and b <-
: > bp + aq. Show that if we apply such a transformation T_(pq) twice,
: > the effect is the same as using a single transformation T_(p'q') of
: > the same form, and compute p' and q' in terms of p and q. This
: > gives us an explicit way to square these transformations, and thus
: > we can compute T^n using successive squaring, as in the 'fast-expt'
: > procedure. Put this all together to complete the following
: > procedure, which runs in a logarithmic number of steps:(5)
就系不明白他说的"transformation"是啥......我数学太烂了
不过算法确实精彩,假设要找fib(17),以下列举每项 fib-iter 的输入:
a b p q count
==========================
1 0 0 1 17
1 1 0 1 16
1 1 1 1 8
1 1 2 3 4
1 1 13 21 2
1 1 610 987 1
2584 1597 610 987 0
count 为零时,b = 1597,所以 f(17) = 1597
神奇的是,count 为 1 时,f(15) 与 f(16) 分别出现为 p、q
count 为 2 时,f(7) 与 f(8) 分别出现为 p、q
往上推如是