您的位置:首页 > 其它

FZU 1042 Ackermann Function

2009-07-29 11:17 169 查看
Ackermann Function

Time Limit:1sMemory limit:32M
Accepted Submit:332Total Submit:931
As is known, Ackermann function plays an important role in the sphere of theoretical computer science. However, in the other hand, the dramatic fast increasing pace of the function caused the value of Ackermann function hard to calcuate.

Ackermann function can be defined recursively as follows:



Given m and n, your task is to compute the value of A(m,n)
Input

Each line of the input will have a two integers, namely m, n, where 0 < m <= 3.
Note that when m<3, n can be any integer less than 1000000, while m=3, the value of n is restricted within 24.
Input is terminated by end of file.
Output

For each value of m,n, print out the value of A(m,n).
Sample Input

1 3
2 4

Sample Output

5
11

Original: chenyan

解题:

要推到公式,在m取值比较小的前提下,比较好推倒公式:

m=1,n=0--->2
m=1,n=1--->3
m=1,n=2--->4
m=1,n=3--->5
m=1------->2+n



m=2,n=0--->3
m=2,n=1--->5
m=2,n=2--->7
m=2,n=3--->9
m=2------->2*n+3



m=3则可以转变。

#include <iostream>
using namespace std;

int Ackermann(int m,int n)
{
	if (m==1)
	{
		return 2+n;
	}
	else if (m==2)
	{
		return 3+2*n;
	}
	else if (m==3)
	{
		if(n>0)
		return Ackermann(2,Ackermann(m,n-1));
		else if (n==0)
		{
			return Ackermann(2,1);
		}
	}
	return 0;
}
int main()
{
	int m,n;
	while (cin>>m>>n)
	{
		cout<<Ackermann(m,n)<<endl;
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: