此函数称为多少次?

时间:2019-07-11 09:30:25

标签: c++

我在递归上有这个子算法,我知道它被称为5次,但是我不明白为什么。初始值为m = 1,n = 2。

我认为该函数被调用了7次。

int Ack(int m, int n)
{
    if (m==0) 
        return n+1;
    else 
         {
            if (m>0 && n==0) 
                return Ack(m-1,1);
            else 
                return Ack(m-1,Ack(m,n-1));
        }
}

我希望它被调用7次甚至更多,但实际数字是5。

这是怎么到达7:

  1. Ack(1,2)
  2. Ack(0,Ack(1,1))
  3. Ack(1,1)
  4. Ack(0,Ack(1,0))
  5. Ack(1,0)
  6. Ack(0,1),一个返回2的函数。Ack(0,1)= Ack(1,0)= 2 ==>
  7. Ack(0,2)(我们回到数字4)= 3
  8. Ack(0,3)(我们回到第2位)

1 个答案:

答案 0 :(得分:0)

您两次计算了两次通话:#7与#4相同,并且#8与#2相同(仅显示Ack返回的值):“返回”不是就像打电话一样。