Math 找到;简明数学定义“;函数在SICP中的应用

Math 找到;简明数学定义“;函数在SICP中的应用,math,scheme,sicp,Math,Scheme,Sicp,计算机程序的结构和解释实现了Ackermann的功能: (define (A x y) (cond ((= y 0) 0) ((= x 0) (* 2 y)) ((= y 1) 2) (else (A (- x 1) (A x (- y 1)))))) 练习1.10要求对调用A的下列函数进行“简明数学定义”: (define (f n) (A 0 n)) (define (g n) (A 1 n)) (define (h n) (A 2 n))

计算机程序的结构和解释实现了Ackermann的功能:

(define (A x y) 
  (cond ((= y 0) 0)
      ((= x 0) (* 2 y))
      ((= y 1) 2)
      (else (A (- x 1) (A x (- y 1))))))
练习1.10要求对调用
A
的下列函数进行“简明数学定义”:

(define (f n) (A 0 n)) 
(define (g n) (A 1 n)) 
(define (h n) (A 2 n))

整数1-4的
f
g
输出可识别为2n和2^n。但是
h
2^(2^n-1)
,仅仅通过在输出中寻找模式,我无法识别这个公式。如何完成这个练习?有没有一种方法可以推导出数学符号,也许是基于阿克曼函数的符号?

已经计算出(fn)=(*2n)和(gn)=(expt2n),我们可以使用这些信息以及a的定义来计算出(a2n)是什么:

输入x=2:

(define (A2 y) 
  (cond ((= y 0) 0)
        ((= y 1) 2)
        (else (A 1 (A2 (- y 1))))))
输入事实(a1n)=(expt2n)


由此可以更清楚地看到递归模式,A2给出了2的嵌套幂,比如2^(2^(2^2))。我认为您的答案2^(2^n-1)可能是错误的。

您可以使用scheme本身来帮助找到以下问题的答案:

(define (*^ x y) `(* ,x ,y))

(define (A x y)
  (cond ((= y 0) 0)
        ((= x 0) (*^ 2 y))
        ((= y 1) 2)
        (else (A (- x 1) (A x (- y 1))))))

;> (A 0 100)
;'(* 2 100)
;> (A 0 234)
;'(* 2 234)
建议(A0N)=(*2N)


重新排序规则以避免错误。我们可以看到它做了*2N次,所以是2^n



这证实了我们得到一个指数塔的想法。

这本书已经介绍了替代法,所以使用它没有错

(A 0 n)

这是

(cond ((= n 0) 0)
      ((= 0 0) (* 2 n))
      ((= 0 1) 2)
      (else (A (- 0 1) (A 0 (- n 1)))))
这显然是2n

接下来,
(a1n)

(cond ((= n 0) 0)
      ((= 1 0) (* 2 n))
      ((= n 1) 2)
      (else (A (- 1 1) (A 1 (- n 1))))))
那是

(A 0 (A 1 (- n 1)))
或者,利用上一步

(* 2 (A 1 (- n 1))
就是

A 1 n = 2 * (A 1 (n-1))
      = 2 * 2 * (A 1 (n-2))
      = ...
因为我们知道对于所有的
x
,都是
ax1=2
,所以我们看到

A 1 n = 2 * 2 * ... * 2
具有
n
因子,即2n


将类似的推理应用于最后一个案例作为练习。

谢谢,这正是我想要的解释。这有一个“简明”的数学定义吗?
(* 2 (A 1 (- n 1))
A 1 n = 2 * (A 1 (n-1))
      = 2 * 2 * (A 1 (n-2))
      = ...
A 1 n = 2 * 2 * ... * 2