inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

연습 문제

재귀함수 답 질문

해결된 질문

308

yudility

작성한 질문수 7

0

안녕하세요 강사님. 좋은 강의 잘 듣고 있습니다!

몇가지 궁금증이 생겨 질문드립니다.

 

static int Factorial(int a)

        {

            if (a == 0)

            {

                return 1;

            }

            return (a * Factorial(--a));

        }

제가 작성한 코드입니다. 정상적으로 실행은 됩니다만, 몇가지 사소한 궁금증이 있어서 올려봅니다.

1.  a==0이 참일때 return 값을 1으로 주는 것보다 n==1이 참일때 return 값을 1로 주는게 더 효율적일까요?(루프를 한번 덜 돌까요?)

2. 강사님께서 if문의 조건식을 n<=1로 작성하셨던데 n==1이 아니고 n<=1로 설정하신 이유가 따로 있을까요?

3. factorial(n-1)부분을 전위 연산자(--a)로 먼저 처리하게 하였는데, 후위연산자를 사용하여 return (a*Factorial(a--))로 하면 return (a*Factorial(a))가 먼저 실행되고  a--가 실행되기 때문에 무한루프를 돈다고 이해했는데 맞을까요? 아니라면 혹시 다른 이유가 있을까요? 

 

재귀함수 factorial C#

답변 1

1

Rookiss

1.
그렇긴 하지만 수학적 정의상 0! = 1이긴 하니, 해당 부분까지 챙기는게 정확하긴 하겠죠.

2.
프로그래밍적인 큰 의미는 없고 0! = 1 케이스까지 챙기려고 그런 것입니다.

3.
네 a--로 하면 Factorial에서 Factorial을 호출하는게
무한으로 타고 가서, 결국 Stack이 터집니다.
(함수를 호출할 때는 돌아갈 곳과 인자를 건내주기 위한 스택 메모리가 필요한데, 이것이 고갈되기 때문)

여담인데 (a*Factorial(--a))이 결과적으로 틀린건 아니지만
a * Factorial(a-1)이 가독성이 더 좋은 일반적인 코드라고 볼 수 있습니다.
가령 나중에 디버깅을 한다고 치면, Factorial(int a)가 호출된 시점의 결과를 보고 싶을 수 있는데
--a 등으로 넘겨받은 인자를 다른 숫자로 바꿔놓는다면, 이런 부분이 조금 보기 어려워지겠죠.
설상 가상으로 a 자체가 값이 바뀐다면
a * Factorial(--a)에서 앞의 a가 어떻게 되는지가 헷갈릴 수가 있습니다.
지금은 a(불변) Factorial(a-1) 형태로 동작하긴 하지만,
만약 Factorial(--a) * a 이렇게만 바꿔도 완전히 결과가 달라지는 것을 볼 수 있죠.

0

yudility

디버깅할 때도 고려해서 코딩해야겠네요!  친절한 답변 감사드립니다!  :) 

Generic에 대한 질문 있습니다.

0

98

2

2022 버전에 커뮤니티 버전이 없는데 2026 버전으로 해도 무관?

0

207

2

다형성 캐시 문제

0

116

3

.

0

73

1

프로퍼티 강의 질문 있습니다.

0

79

1

이후 커리 질문

0

87

1

static

0

93

2

강의에는 새로운 클래스 파일을 생성하면...

0

72

1

생성자의 이름 선언

0

66

1

9:03 Divide(10 , 3) 부분 질문입니다

0

91

1

깃허브 관련 질문 있습니다.

0

241

1

비쥬얼 스튜디오 업데이트가 된건가요..? 매개변수 오류 관련 질문

0

250

1

C# 시리즈 || C++ 시리즈 자료구조 강의에 대한 질문입니다!

0

307

2

Activator 질문있습니다

0

336

1

이넘 타임 선언 질문

0

351

1

Sort 오름차순, 내림차순

0

323

1

질문 있습니다.

0

250

1

팩토리얼 문제

0

273

1

Sort함수 질문있습니다.

0

266

1

다형성 함수 질문 있습니다.

0

222

1

질문이 있습니다.

0

231

1

섹션2 연습문제 질문입니다.

0

216

1

안녕하세요~서버에 대해 질문이 있습니다.

1

284

1

텍스트 색깔이 제 편집기와 달라서 수강에 어려움이 있습니다ㅜㅜ

0

397

1