【问题标题】:Ackermann function versus n nested loopsAckermann 函数与 n 个嵌套循环
【发布时间】:2011-04-29 22:48:00
【问题描述】:

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

阿克曼函数(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) 

这两个函数有什么简单的关联方式吗?我觉得我在迷雾中四处爬行——您能给我关于如何解决这类问题的任何见解将不胜感激。另外,有没有办法在不引入第三个参数的情况下实现完全递归循环函数?谢谢。

【问题讨论】:

  • 在第一个代码 sn-p 你有两个连续的return - 一个错字?
  • @eumiro,第二次返回是 m != 0 和 n != 0 的情况
  • @Paul,好的,谢谢,我修正了代码缩进。
  • “我在雾中爬行”只是“我正在编写递归函数”的另一个词......

标签: python computer-science computability


【解决方案1】:

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

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

edit -- 等等,我想我抄错了函数。稍后我会再考虑一下,如果我想到了什么我会更新!

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 2020-10-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多