Программирование на С: рекурсия - PullRequest
0 голосов
/ 17 июня 2011

поэтому я написал эту простую программу рекурсии и получаю сообщение об ошибке при компиляции с GCC

ошибка: в качестве левого операнда присваивания требуется lvalue

Надеюсь, этоничего серьезного, любая оценка приветствуется

Спасибо!

#include <stdio.h>
int factorial (int);

int main (void)


{

        int i = 0;
        int a = 0;

        printf("Please enter an integer: ");
        scanf("%d", &i);

        a = factorial (i);

        printf("\n\n%d factorial equals: %d \n", i, a);

        return 0;
}

int   factorial ( int  n )
        {
        if ( n  <= 0 )
                return 0 ;
        else
                f(n) = f( n-1) + 2;              
        }

Ответы [ 5 ]

6 голосов
/ 17 июня 2011

Следующее утверждение недопустимо C:

            f(n) = f( n-1) + 2;              

(я предполагаю, что это строка, на которой вы получили ошибку; вы не сказали.)

Возможно, вы захотите попробовать следующее:

            return factorial(n-1) + 2;

но тогда имя factorial вводит в заблуждение, потому что это не правильная формула для факториальной функции .

3 голосов
/ 17 июня 2011

Почему вы пишете это

   f(n) = f( n-1) + 2; 

Я не вижу ни одной функции с именем f().
Это неправильная формула для расчета факториала любого числа. Посмотрите на ссылку Грега.

Измените его на

int  factorial (int  n)
    {
     if (n==1||n==0)
            return 1;
    else
            return n*factorial(n-1);              
    }
0 голосов
/ 17 июня 2011

Оператору присваивания = необходима переменная в левой части, которой назначено значение в правой части.Вы не можете назначить что-то для функции, что f (n) в соответствии с синтаксисом C.Это присвоение значения строкам кода, что не имеет смысла.Единственное, что имеет смысл в левой части функции, это что-то, что может хранить значение .

Функции могут идти с правой стороны назначения, если толькоони возвращают что-то (они не имеют типа void).

Чтобы получить факториал правильно, вам нужно подумать еще немного ... прежде всего помните, что вы хотите, чтобы последнее значение было 1, а не ноль,И все числа в факториале умножаются.

0 голосов
/ 17 июня 2011

заменить f (n) = f (n-1) + 2;с

return n*factorial(n-1)

и да, 0!один так добавить

if(n==0) return 1;
0 голосов
/ 17 июня 2011

Ошибка с f (n) = f (n + 1) в вашей факториальной функции.Все с круглыми скобками является функцией в c, и функции не может быть присвоено значение.Вы, вероятно, хотите n = факториал (n + 1);

...