1. 程式人生 > >10-5 遞迴計算函式ack(m, n)

10-5 遞迴計算函式ack(m, n)

// 10-5
// 遞迴計算函式ack(m, n)
#include <stdio.h>

int ack(int m, int n);

int main(void)
{
	int m, n;
	
	printf("請輸入m和n:");
	scanf("%d%d", &m, &n);
	while (1)
	{
		if (m>=0 && n>=0)
		{
			break;
		}
		else
		{
			printf("請重新輸入m和n(m>=0,n>=0):");
			scanf("%d%d", &m, &n);
		}	
	}
	
	printf("ack(%d, %d)=%d\n", m, n, ack(m,n));
	
	return 0;	
} 

int ack(int m, int n)
{
	int result;
	
	if (m == 0)
	{
		result = n+1;
	}
	else if (m>0 && n==0)
	{
		result = ack(m-1,1);
	}
	else
	{
		result = ack(m-1,ack(m,n-1));
	}
	
	return result;
}