(define (num-ways x y)
(case ((= x 0) 1)
((= y 0) 1)
(num-ways2 x y) ))
(define (num-ways2 x y)
(+ (num-ways (- x 1) y)
(num-ways x (- y 1))
慕莱坞森
浏览 2121回答 3
3回答
慕沐林林
是否总是可以为每个递归函数编写非递归形式?是。一个简单的形式证明就是证明预递归非递归演算(如Goto)都是图灵完整的。由于所有图灵完全计算器在表达能力上都是完全等价的,所以所有递归函数都可以用非递归图灵全演算来实现。不幸的是,我无法找到GotoOnline的一个好的、正式的定义,因此这里有一个:Goto程序是一系列命令P在寄存器机使.P如下之一:HALT,这将停止执行r = r + 1哪里r是任何登记册r = r – 1哪里r是任何登记册GOTO x哪里x是个标签IF r ≠ 0 GOTO x哪里r是任何登记册x是个标签一个标签,后面跟着上面的任何命令。然而,递归函数和非递归函数之间的转换并不总是那么简单(除了调用堆栈的盲目手动重新实现)。有关更多信息,请参见这个答案.