习题10-5 递归计算Ackermenn函数(15 分)

习题10-5 递归计算Ackermenn函数(15 分)

本题要求实现Ackermenn函数的计算,其函数定义如下:
$$
\operatorname{ack}(m, n)=\begin{cases}
n+1, & m = 0 \\\\
\operatorname{ack}(m-1, 1), & n=0 \& \& m\gt0 \\\\
\operatorname{ack}(m-1, \operatorname{ack}(m, n-1)),& m \gt0 \& \& n\gt 0
\end{cases}
$$

函数接口定义:

1
int Ack( int m, int n );

其中mn是用户传入的非负整数。函数Ack返回Ackermenn函数的相应值。题目保证输入输出都在长整型

范围内。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int Ack( int m, int n );

int main()
{
int m, n;

scanf("%d %d", &m, &n);
printf("%d\n", Ack(m, n));

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2 3

输出样例:

1
9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>

int Ack( int m, int n );

int main()
{
int m, n;

scanf("%d %d", &m, &n);
printf("%d\n", Ack(m, n));

return 0;
}
int Ack(int m, int n)
{
int result;

if (m == 0)
result = n+1;
else
{
if (n == 0)
result = Ack(m - 1, 1);
else
result = Ack(m-1, Ack(m, n-1));
}
return result;
}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×