woogie   2년 전

안녕하세요. 

코딩초보입니다. 이해가 안가는 부분 질문드립니다.

팩토리얼 문제입니다. 

N!이 0 또는 1일때 return 1을 하는것 까지 이해가 갑니다.

문제는 그 다음줄인데 

N = 5 라고 가정했을때 

return N * func(N) - 1 // 5 * func(4) 에서 

5 * 4 로 계산이 되는지 이해가 가질않습니다. func(4)를 다시 호출한건데 왜 4가 나오는걸까요 ㅠㅠ

함수내에서 자기자신을 호출하는 부분이 너무 생소합니다. 이게 기초인데 말이죠 ㅠㅠ

그리고 계속해서 5*4*3*2*1 로 팩토리얼 계산이 되는데 

N이 1일때 그 다음 0이 되지 않는 이유도 궁금합니다.... 

0이 되지 말라는 조건식이 따로 없는거 아닌가요? 

5*4*3*2*1*0 = 0 이 될수 있다고 생각했거든요 그리고 N도 쭉쭉 음수로 간다고 생각했습니다.

도와주세요 ㅠㅠㅠ

sweetlulu486   2년 전

운영체제 내부에서 끝나지 않은 명령어들을 스택(자료구조)으로 함수를 쌓아 놓습니다. 함수가 종료조건을 만족하는 시점이 왔을때 그 함수를 종료시키면서 쌓아왔던 함수 들의 결과값을 반환 합니다.

woogie   2년 전

감사합니다. 설명 더 듣고싶습니다 

sweetlulu486   2년 전

재귀함수은 어떤 값이 대체로 증가하거나 감소하는 부분이 필수 적입니다.   함수를 끝내는 조건(보통 기저조건이라고 함) 을 적어두고 그때까지 실행하기 위해서 인데요.

그 조건에 맞추기 전까지 재귀함수는 계속 함수를 진행합니다. 함수의 입력이 5(N)로 들어왔지만 함수의 아랫 부분에서 4(N-1)을 넣어줍니다.  또 4(N)에서 3(N-1)을 넣어줍니다.

이렇게 반복해서 N이 1인 경우 도미노가 더이상 쌓이지 않게 끔 합니다. 

factorial의 정의에 1!은 1이므로 1을 return 하고 나머지는 n == 1이 아니기 때문에 2*1 -> 3*2*1 -> 4*3*2*1 -> 5*4*3*2*1 이렇게 실행됩니다.

woogie   2년 전

친절한 답변 너무 감사합니다 !

궁금한점이 기저조건에 대해서 함수 탈출 조건에 대해서 여쭤볼려고 합니다.

if문안에서 N이 2일때 N * func(1) 이후

다시 함수 안으로 들어가면 N이 1이기 때문에 return 1을 반환하지 않나요...?

이 부분에 대해서 이해가 가지 않습니다 ㅠ

sweetlulu486   2년 전

그거 끝나고 func(2)로 돌아가서 2 * func(1)을 return 합니다

즉, return 2 * 1을 수행한다는 뜻입니다.

woogie   2년 전

기저조건으로 return 1을 먼저 반환하고

그 다음 return 2*1 차례대로 쭉쭉 반환한다는 거군요 !

눈물겹습니다 ㅠㅠㅠ 감사합니다

sweetlulu486   2년 전


그거 끝나고 func(2)로 돌아가서 2 * func(1)을 return 합니다

즉, return 2 * 1을 수행한다는 뜻입니다.

2*1 -> 3*2*1 -> 4*3*2*1 -> 5*4*3*2*1 이렇게 실행됩니다.

return 3 * (2*1)

return 4 * (3 * 2 * 1)

return 5 * ( 4* 3 * 2 * 1)

를 일반화 하면

return N * N-1 * ... * 2 * 1;

을 수행합니다.

preview

woogie   2년 전

이해를 도와주셔서 감사합니다 !

그림까지 !

좋은 하루 되세요 

댓글을 작성하려면 로그인해야 합니다.