这个代码是没有问题的,可以实现阿克曼函数的功能,我是用c语言试的,修改了一下输入输出函数,给m,n赋了初值,结果是对的。可以实现你想要的功能。
程序没问题,但结果的数值太大了,计算机根本算不出来。比如A(4,2)的结果是2的65536次方-3,大约是2.03乘10的19728次方,这个值计算机根本算不出来的。A(5,3)就更离谱了,当然算不出。向解决这类问题要从算法角度考虑,直接构造阿克曼函数是不行的。
Ackermann输出值增长速度很大,这程序小数据可以过,f(4,3)就已经没法计算了
其实阿克曼函数的公式是
A(m,n)=2(第m级运算)(n+3)-3
A(4,2)=2↑↑5-3=2^65536-3=2.0035×10^19728,还是可以估算出来的。算lg2=0.30103,然后×65536,再10的次方即为结果。但是有几万位数,程序要计算很久。
然后A(5,3)=2↑↑↑6-3=2↑↑2↑↑2↑↑2↑↑4-3=2↑↑2↑↑2↑↑65536-3=2↑↑2↑↑(2^2^2^2^……^2)(里面有65536个2相乘方)-3=……
A(5,3)是算不出来的,连乘方塔都这么抽象。
f(3,5)=2^8-3=253,数这么小当然能有结果。上面那两个数太大了。