最后自己得出的结论,双递归的深度不能超过3.否则层数将会以难以想象的速度趋向正无穷大!!
这题Ackerman函数是经典的一个双递归函数。
这题其实主要目的就是要让我们了解双递归函数的执行过程。
但是我们的代码当中并没有用到递归函数,这是为什么呢??
因为根据推倒可以得出,
当m=1的时候可以推导出2+n
当m=2的时候可以推导出3+n*2
当m=3的时候可以推导出
sum = 13;
for (i=1;i<n;i++)
sum += (int)pow(2,3+i);
之前我是用递归的方法做的,但是当m=3的时候,空间复杂度增加的非常快,最终将导致栈溢出。
引发Runtime Error.
那肯定大家想知道公式是怎么推的。。。
数学我是不好的。。
不过有个简单的办法。。
先用递归做。找出输出值的递增规律。从而推导出关系。。。
这个好像很不专业的样子。。。。
注意当m=3的时候,必须考虑n=0的情况。