C++ 这个函数被调用了多少次?

C++ 这个函数被调用了多少次?,c++,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 r

我有一个关于递归的子算法,我知道它被调用了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,2)
  • 确认(0,确认(1,1))
  • 确认(1,1)
  • 确认(0,确认(1,0))
  • 确认(1,0)
  • Ack(0,1),一个返回2的函数。确认(0,1)=确认(1,0)=2=>
  • Ack(0,2)(我们回到数字4)=3
  • Ack(0,3)(我们回到2号)

  • 您重复计算了2次调用:#7与#4相同,而#8与#2相同(仅显示了
    Ack
    返回的值):“回来”与调用不同。

    并且……您是否尝试过调试它以比较实际发生的情况与您的想法?@Ventu 1)Ack(1,2)Ack(0,Ack(1,1))3)Ack(1,1)4)Ack(0,Ack(1,0))5)Ack(1,0)Ack(6)Ack(1,0)(0,1),一个返回2.Ack(0,1)=Ack(1,0)=2=>7)Ack(0,2)(我们回到数字4)=3 8)Ack(0,3)(我们回到数字2)@Severiennebianta,只需将此执行路径添加到您的问题中并正确格式化,在注释中阅读是非常可怕的。它被调用了6次: