Я хочу найти факториал данного числа с помощью рекурсивной функции в C. Что не так со следующей программой? - PullRequest
0 голосов
/ 06 декабря 2010
#include<stdio.h>

int fact(int i);
void main()
{
    int j;

    j=fact(4);

    printf("%d",j);
}

int fact(int i){
    int x=i;static int tot=1;

    if(x<1){
        tot=x*fact(x-1);
    }

    return tot;
}

Пожалуйста, помогите мне с этим кодом. Что заключено в этом коде?

Ответы [ 4 ]

3 голосов
/ 06 декабря 2010
if(x<1)

Вы уверены, что не имели в виду x > 1?

Кроме того, я бы избавился от static в вашем объявлении tot.Это относится к tot аналогично глобальной переменной.Тебе это не нужно.Поскольку tot всегда присваивается перед прочтением, похоже, что здесь это не вредно, но в целом это выглядит как красный флаг.

3 голосов
/ 06 декабря 2010

У вас нет базового условия в функции факта.

Вам необходимо проверить:

 if(i == 1){
    return 1;
 }else{

   return i * fact(i - 1);

}
1 голос
/ 06 декабря 2010

Вы не хотите static в вашей декларации tot.

1 голос
/ 06 декабря 2010

Вы ошиблись в операторе if, это должно быть

if(x > 1) {
   tot=x*fact(x-1);
}

EDIT: Кроме того, tot должно быть нестатичным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...