2015-01-18 3 views
-1

Когда я выполняю эту программу, я получаю segfault и не знаю почему. Она должна возвращать факториал (?) На входе, пока оно больше 0.Почему возникает ошибка сегментации при выполнении этой программы?

#include <stdio.h> 

int factorial(int input) 
{ 
    if (input > 0) 
    { 
    return input * factorial(input--); 
    } 
    else 
    { 
    return 1; 
    } 
} 
int main() 
{ 
    printf("%d", factorial(23)); 
    return 0; 
} 
+0

'x * somefunc (x -)' провоцирует UB в любом случае. – alk

+0

Еще одна проблема, с которой вы столкнетесь, заключается в том, что ваша программа только вычисляет факториальную функцию, пока результат вписывается в 'int' и в противном случае переполняется. –

+0

Один символ 'printf' внутри функции должен был показать проблему. – usr2564301

ответ

2

factorial(input--) не делать то, что вы думаете, что он делает. Используйте factorial(input-1).

Это page that documents the post-decrement operator, который поможет его правильно использовать. Вы никогда придется использовать. Вы всегда можете делать то, что вы намереваетесь, с +, - и = (присвоение).

Ваша программа производит ошибку сегментации, потому что, как вы ее написали, factorial(23) вызывает factorial(23), в результате получается stack overflow.

+0

_perfect thx:) _ – ph001

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