【问题标题】:Can every iterative function be converted into a recursive function?每个迭代函数都可以转换成递归函数吗?
【发布时间】:2021-05-13 21:30:28
【问题描述】:

现在一些编译器可以帮助我们将递归函数转换为迭代函数,但我的问题是每个迭代函数都可以有一个递归函数吗?

【问题讨论】:

    标签: recursion iteration language-agnostic


    【解决方案1】:

    每个迭代函数都可以转换为递归函数,反之亦然。 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, h, s)
    

    函数RunTransition 只是检查转换表中当前磁带符号和状态的匹配行,并返回新的磁带符号、磁带头位置和状态。这应该说明,原则上,递归对于实现图灵机是完全足够的,这意味着任何可计算的函数都可以通过递归来解决(如果你相信 Church-Turing 假设)。因为迭代函数只能做图灵机(同样,如果你接受 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()
    

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 2017-06-04
      • 2020-08-08
      • 2015-05-30
      相关资源
      最近更新 更多