Ackermann函数与n个嵌套循环

时间:2010-10-24 20:44:59

标签: python computer-science computability

我正在研究一本关于计算的书(Minksy 1967),并且很难将递归函数与循环定义的函数联系起来。具体来说,他要求找到两个函数之间的关系:

Ackermann函数(python中的所有代码):

def a(n,m):
    if n==0:
        return m+1
    if m==0:
        return a(n-1,1)
    return a(n-1,a(n,m-1))

一个用n个嵌套循环计算的函数:

def p(n,m):
    for i_1 in range(m):
        for i_2 in range(m):
           ...
             for i_n in range(m):
                  m+=1

写这个(用一个循环)的递归方式是:

def p(n,m):
     if n==0:
         return m+1
     for i in range(m):
         m=p(n-1,m)
     return m

或者完全递归的方式来编写它:

def p(n,m):
    return P(n,m,m)
def P(n,k,m):
    if n==0:
        return m+1
    if k==1:
        return P(n-1,m,m)
    m=P(n,k-1,m)
    return P(n-1,m,m) 

这两个函数有关联的简单方法吗?我觉得我在迷雾中爬行 - 任何有关如何处理这些问题的见解都会非常感激。另外,有没有办法在不引入第三个参数的情况下实现完全递归循环函数?感谢。

1 个答案:

答案 0 :(得分:1)

嗯......我不认为这会对你有多大帮助,我也有点困惑,但这是我的想法。

  • 阿克曼(0,m)== p(0,m)
  • 阿克曼(1,m + 1)== p(1,m)

编辑 - 等待我认为我错误地使用了该功能。我稍后会更多地考虑这个问题,如果我想到一些事情我会更新!