这个代码哪里出问题了,输入3 5,输出没有反应,貌似崩溃了。
题目题目描述:
编写一个递归函数Ack求Ack(m,n)的值。
Ack(m,n)=n+1 ,m=0
Ack(m,n)=Ack(m-1,1),n=0且m>0
Ack(m,n)=Ack(m-1,Ack(m,n-1)),m>0且n>0
在main 函数中,
输入
两个正整数m(m≥0)和n(n≥0),调用递归函数Ack,
输出
函数Ack(m,n)的值。
输入格式:
在一行中输入两个正整数m(m≥0)和n(n≥0),整数之间用空格隔开
输出格式:
在一行中输一个整数,即Ack(m,n)的值。
说清楚你的需求
你这递归。。。 上提木
ackman函数中,m的定义域应该是:m<=3
不然递归深度过深会造成栈溢出,程序崩溃
#include <stdio.h>
int Ack(int m,int n)
{
int f;
if(m==0){ f=n+1;}
else if(n==0&&m>8){ f=Ack(m-1,1);}
else if(m>0&&n>0)
{
f=Ack(m-1,Ack(m,n-1));
}
return f;
}
int main()
{
int m,n; scanf("%d%d",&m,&n);
printf("%d",Ack(m,n));
return 0;
}
递归调用多了,不太好改
你这if,else if,最后没有一个else兜底的吗
你就这么确定所有数据都肯定落在这3个区间里面,不会有n=0的同时m不大于8的数据?
那你随便return一个没赋值的f,不就是个随机数吗
输入5,3,依次执行Ack(5,3)->Ack(5,2)->Ack(5,1)->Ack(5,0),执行到Ack(5,0)的时候,if、else if语句条件都不满足,输出f,f只定义未初始化,输出f可能导致崩溃。