① 簡單c語言編程....己知ackerman函數,對於m>=0和n>=0的如下定義:
這是最基本的遞歸用法的題目:我用3分鍾編寫如下:
並且調試成功。
#include<stdio.h>
int ack(int m,int n)
{
int x;
if(m==0&&n==1) x=2;
if(m==1&&n==0) x=2;
if(m>0&&n>0) x=ack(m-1,ack(m,n-1));
return x;
}
void main()
{
int m,n;
printf("Please input 2 int : m,n=");
scanf("%d%d",&m,&n);
printf("ack(m,n)=%d\n",ack(m,n));
}
② c語言 計算Ackermann函數。
你的n、x、y都是int型的,其值要小於65536,但是但輸入數字nxy分別為4,2,4時就達到65536,所以程序本身並沒有問題,有問題的是數值類型的取值范圍太小。而且這個函數計算值過於巨大,如果輸入nxy過大一般計算機根本沒辦法計算。。。
③ 利用遞歸法求阿克曼函數
這里給出C語言的阿克曼遞歸函數:首先,阿克曼函數標準定義:#include <stdio.h>
#include <stdlib.h>int Ackmann(int n,int m)
{
if(m==0)return n+1;
else if(m>0 && n==0)return Ackmann(m-1,1);
else return Ackmann(m-1,Ackmann(m,n-1));
}int main()
{
int m,n;
printf("輸入m和n:");
scanf("%d,%d",&m,&n);
printf("結果是:%d",Ackmann(n,m));
system("pause");
return 0;
}
④ Ackerman函數 C語言程序
#include"stdio.h"
int Ackerman(int n,int m)
{
if(n==1&&m==0)
return 2;
else if(n==0&&m>=0)
return 1;
else if(n>=2&&m==0)
return n + 2;
else if(n>=1&&m>=1)
return Ackerman(Ackerman(n - 1,m),m - 1);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
printf("%d\n",Ackerman(n,m));
return 0;
}