순환함수와 비순환함수 문제.
돌삥
질문 제목 : 순환함수와 비순환함수 문제.arkermman 함수 문제입니다.질문 내용 :
m=0 , a(m,n) = n+1
n=0 , a(m,n) = a(m-1,1)
else , a(m,n) = a(m-1,a(m,n-1)) 이라는 함수입니다.
#include stdio.h
int ark(int m,int n)
{
if(m==0)
{
return n+1;
}
else if(n==0)
{
return ark(m-1,1);
}
else
{
return ark(m-1,ark(m,n-1));
}
}
int main()
{
int m,n,k;
while(1)
{
printf(input a(m,n) m and n \n);
scanf(%d,&m);
scanf(%d,&n);
k=ark(m,n);
printf( a(%d,%d) = %d\n,m,n,k);
}
}
여기까지인데요. m 과 n 이 4이상으로넘어가면 에러가 뜹니다 ㅠㅠ
왜그런지 알수있을까요???ㅠㅠint main()
-
틀큰
그리고 이거 자체가 함수호출을 너무 많이 하네요.
얼마나 호출하나 세어봤는데
m n
3 3 일때 2,432 번
3 8 일때 2,785,999 번
3 9 일때 11,164,370 번 -
일진누나
n은 증가도 합니다..
-
자올
빠져나소긴해요ㅠ 계속 함수를 호출하면서 m n이 작아지니까요ㅠ
-
틀큰
세번째 조건 즉 m도 0이 아니고 n도 0이 아닌 상황에서는 return 하기위한 값을 얻기 위해 ark함수를 호출합니다
그런데 호출하기 전에 n값을 앞의 ark함수에 인자로 주려고 ark함수를 먼저 호출, 결국 2번을 호출하는데...
m이 0이거나 n이 0인 두번 외에는 계속 위에처럼 다시 두번의 ark함수호출을 합니다
호출된 함수도 역시...
재귀함수의 무한반복 아닌가요?
세번째 식을 풀어서 함수로 구현하든가 아님 세번째식 자체를 바꿔야 하지 -
고독
변하는 값을보면 왜그런진 모르겠지만 m이 0000000000000000111111111111111111111000000000000000000000011111111111111111111100000000000000000000011111111111 처럼 되면서 함수호출이 계속되네요.
n값은 계속 변하구요. 저 식이 잘못된거같은데요? -
비내리던날
제가 문제를 잘못올렷네요 ㅠ
m,n모두 0이 아닐때는 A(m,n)= A(m-1,A(m,n-1)) 이맞네요ㅠ 뭐가문젠지 ㅠㅠ -
등대
마지막 return 문이 이상한데요.
return ark(m,n-1);
으로 해야합니다.