SICP 1.20经验

1.20 两者之间的主要区别是,使我们明白的操作顺序。

网上找一些答案,都死了扩大。 我们所从事的IT的。 展开搞死人IT实践。


首先考虑应用程序

我们得到

gcd(206, 40) -> gcd(40, 6) -> gcd(6, 4) -> gcd(4,2)->gcd(2,0)  总共4次递归调用,每次递归做一次取余数运算。


那么。 正则序列怎么知道呢? 一种办法是全然按步骤做法。 这是计算机思维。 搞IT的就要换数学思维。

先看看规律。 206-> 40-> 6-> 4 -> 2   存在某种序列关系。我们设定一个序列A。表示求该数所需的余数次数,那么必定有

A[0] = 0, A[1] = 0, A[2] = 1, A[3]  = 1+ A[1] + A[2], A[n]  = 1 + A[n-1] + A[n-2] 为什么?

由于 An = r(A[n-1], A[n-2]) 依照正则求值规则,我们先要展开A[n-1]。A[n-2], 最后再计算A[n]。必定有该公式。


接下来考虑怎样用A来求答案。

通过代码能够知道。 前面的递归。 仅仅有if 里用到了b。 最后一次递归, 用到了a

所以扩大的数

A[1] + A[2] + A[3] + A[4] + A[5]  + A[4]  = 0 + 1 + 2 + 4 + 7 + 4  = 18次要

相同。由A不管两个数可以得到典型的扩展。

原文地址:https://www.cnblogs.com/yxwkf/p/4566350.html