2017-02-20 11 views
1

Я новичок в C++, и я пытаюсь сделать калькулятор. Я разработал эту функцию с целью получения факториала целого ряда:EXC_BAD_ACCESS в простой программе C++ XCODE

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

    return sum; 
} 

Всякий раз, когда я пытаюсь скомпилировать это, однако, я получаю EXC_BAD_ACCESS ошибки на

int factorial(int num1) 

Любая идея, что происходит? Я использую XCODE.

+0

Я сомневаюсь, что сбой компилятора, вместо этого я думаю, что это ваша программа, которая падает при попытке запустить ее. Но мы не можем сказать много, если у нас нет [минимального, полного и проверяемого примера] (http://stackoverflow.com/help/mcve). Измените свой вопрос, чтобы включить это, самое главное, как вы * вызываете * функцию (не объявляете ее). И если вы читаете ввод, то также включаете фактический ввод, который вы даете. Или попробуйте решить эту проблему самостоятельно, запустив программу в отладчике. –

+2

Однако, если вы проходите, например. '2' в функцию, вы будете иметь * бесконечную рекурсию *. Вы можете использовать отладчик, чтобы узнать, почему. –

ответ

1

Ваше определение приводит к бесконечной рекурсии всякий раз, когда num1 не является 1.

ли математику себя:

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) 

(И факториал не является суммой, а продуктом.)

 Смежные вопросы

  • Нет связанных вопросов^_^