浙大版《C语言程序设计(第3版)》题目集
习题10-4 递归求简单交错幂级数的部分和 (15 分)
本题要求实现Ackermenn函数的计算,其函数定义如下:
a
c
k
(
m
,
n
)
=
{
n
+
1
m = 0
a
c
k
(
m
−
1
,
1
)
n = 0 && m > 0
a
c
k
(
m
−
1
,
a
c
k
(
m
,
n
−
1
)
)
m>0 && n>0
ack(m, n)= \begin{cases} n+1& \text{m = 0}\\ ack(m-1,1)& \text{n = 0 \&\& m > 0}\\ ack(m-1,ack(m,n-1))& \text{m>0 \&\& n>0} \end{cases}
ack(m,n)=⎩⎪⎨⎪⎧n+1ack(m−1,1)ack(m−1,ack(m,n−1))m = 0n = 0 && m > 0m>0 && n>0
函数接口定义:
int Ack( int m, int n );
其中m和n是用户传入的非负整数。函数Ack
返回Ackermenn
函数的相应值。题目保证输入输出都在长整型范围内。
裁判测试程序样例:
#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
二、题解
c代码
int Ack( int m, int n ) {
long long ans = 0;
if(!m) ans = n + 1;
else if(!n && m) ans = Ack(m - 1, 1);
else if(n && m) ans = Ack(m - 1, Ack(m, n - 1));
return ans;
}