如何解决每个迭代函数都可以转换为递归函数吗?
现在一些编译器可以帮助我们将递归函数转换为迭代函数,但我的问题是每个迭代函数都可以有一个递归函数吗?
解决方法
每个迭代函数都可以转换为递归函数,反之亦然。 Church-Turing 假设说图灵机是一个通用计算系统:任何可计算的函数都可以作为图灵机来实现。如果您的语言可以实现图灵机,则它是图灵等价的,因此可以计算任何可计算的函数。
我们可以使用没有迭代的递归来实现图灵机吗?当然可以
TuringMachine(tape[1...n...],head,state)
if state = halt_accept then return true
if state = halt_reject then return false
(t,h,s) = RunTransition(tape[head],state)
tape[head] = t
return TuringMachie(tape,s)
函数RunTransition
只是检查当前磁带符号和状态的匹配行的转换表,并返回新的磁带符号、磁带头位置和状态。这应该说明,原则上,递归对于实现图灵机是完全足够的,这意味着任何可计算的函数都可以通过递归来解决(如果你相信丘奇-图灵假设)。因为迭代函数只能做图灵机(同样,如果你接受 Church-Turing 假设),那么任何迭代过程都可以变成递归过程。
For 循环不难想象:
function Foo()
for i = 1 to n
f(i)
Foo()
... becomes ...
function Foo(i)
f(i)
if i + 1 < n then foo(i + 1)
Foo(0)
虽然循环被类似地转换:
function Foo()
condition = true
while condition
f()
Foo()
... becomes ...
Foo()
if condition then
f()
Foo()
Foo()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。