2017-02-20 1 views
1

저는 C++을 처음 사용하고 계산기를 만들려고합니다. 그러나, 나는간단한 C++ XCODE 프로그램에서 EXC_BAD_ACCESS

int factorial(int num1) 

무슨 일이 일어나고 있는지 어떤 생각의 오류 EXC_BAD_ACCESS를 얻을

 int factorial(int num1) { 
    int sum; 
    if (num1 == 1) { 
     sum = 1; 
    } 
    else { 
     sum = factorial((num1 - 1) * num1); 
    } 

    return sum; 
} 

나는 시도하고이를 컴파일 할 때마다 : 나는 숫자의 계승을 얻기위한 목적으로이 기능을 설계? XCODE를 사용하고 있습니다.

+0

나는 컴파일러가 충돌하는 것을 의심합니다. 대신 프로그램을 실행하려고 할 때 프로그램이 충돌한다고 생각합니다. 그러나 우리는 [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 없으면 실제로 말할 수는 없습니다. 가장 중요한 것은 함수를 호출하는 방법 (선언하지 말 것)을 포함하도록 질문을 편집하십시오. 그리고 당신이 입력을 읽는다면 또한 당신이주는 실제 입력을 포함 시켜라. 또는 디버거에서 프로그램을 실행하여 직접 문제를 해결해보십시오. –

+2

하지만 예를 들어 함수에 '2'를 넣으면 * 무한 재귀 *가됩니다. 디버거를 사용하여 이유를 찾을 수 있습니다. –

답변

1

num11이 아닐 때마다 정의가 무한 반복됩니다.

하면 수학을 직접 수행

factorial(2) 
= factorial((2-1) * 2) 
= factorial(2) 
= factorial((2-1) * 2) 
= ... 

또는

factorial(3) 
= factorial((3-1) * 3) 
= factorial(6) 
= factorial((6-1) * 6) 
= factorial(30) 
= ... 

계승 함수의 재귀 적 정의는

factorial(n) = factorial((n - 1) * n) 

factorial(n) = n * factorial(n - 1) 
됩니다 아니다

(계승은 합계가 아니라 제품입니다.)

관련 문제