Домашнее задание- Программирование на C- Рекурсивная программа

#c #recursion

#c #рекурсия

Вопрос:

Привет, ребята! Мне была назначена эта программа, которая была довольно простой и не требовала много времени для написания кода, но я не могу заставить ее работать. Ничего не печатается, и я думаю, это потому, что это переходит в бесконечный цикл. Просто ищу исправление этого.

Задание:

Напишите и протестируйте рекурсивную функцию, которая возвращает значение следующего рекурсивного определения:

 f(x) = 0        if x <= 0 
f(x- 1)   2       otherwise
  

Моя программа:

 #include <stdio.h>
int main(void)
{
    int n, x;

    int factorial(int n) {

        if (x <= 0) {
            printf("x equals: ");
            return 1;
        } else {
            return n * factorial(n - 1); //error here
        }
        f(x) = f(x - 1)   2;
    }
    return 0;
}
  

Комментарии:

1. В этом есть хитрость. Это включает в себя отступ в коде так, чтобы элементы внутри { и } имели четыре (4) дополнительных пробела впереди. Если вы правильно расставите отступы в своем коде, вы сможете увидеть некоторые из созданных вами проблем.

2. Добавляйте printf везде, где считаете нужным, и попробуйте выполнить отладку. Хм, перенос факториала в отдельный метод был бы хорошей отправной точкой.

3. Или вообще удаление факториала, поскольку он фактически никогда не использовался.

4. И тогда Бог сказал «пусть будет astyle», и там был приличный отступ. codepad.org/TfIWk6kM

5. Я думаю, что первые две строки в этом блоке кода — это назначение; т. Е. код должен выглядеть как codepad.org/xqkyhdxA — возможно, это не очень хороший пример рекурсии, но я думаю, что он отвечает на реальный вопрос.

Ответ №1:

Я вижу это неправильно? Почему существует

f (x)=f(x-1) 2;

в вашей факториальной функции int?

Комментарии:

1. Собирался сделать тот же комментарий. Есть ли в программе какая-либо функция с именем f()? В частности, это полный код или только его часть?

Ответ №2:

Этот код не должен компилироваться как есть. Вы не можете определить одну функцию внутри другой на C, поэтому вам нужно создать другую функцию снаружи main() и вызвать ее.

Я предлагаю вам полностью удалить функцию factorial (), поскольку она, по-видимому, не имеет отношения к этому заданию.

Базовая структура вашей программы должна быть:

 #include <stdio.h>

int f(int x)
{
    //definition of recursive function
}

int main(void)
{
    //call to recursive function
    return 0;
}
  

Задание дает вам определение рекурсивной функции; вам просто нужно перевести его на C.

Ответ №3:

Вы должны определить факториальную функцию в main, что невозможно.Отделите его определение от main() и вызовите его из main().

Надеюсь, это сработает.Сначала исправьте это, а затем только что-то можно будет сделать.

Ответ №4:

  1. Вы объявили факториал внутри main.

  2. Вы не вызываете factorial в main.

Ответ №5:

Вы хотите что-то вроде этого:

 int factorial(int n) {
    //calculate the factorial
    return resu<
}

int main() {
    int result = factorial(10);  // Calculate 10!
    printf("10! is %d", result);
}
  

P.S. Спасибо, что честно сказали, что это домашнее задание!

Ответ №6:

Вас просят реализовать f(x) , определенный как:

 f(x) = 0              if x <= 0 
       f(x-1)   2     otherwise
  

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

Вам нужно реализовать функцию f , и реализация будет выглядеть следующим образом:

 int f( int x ) {
    if( x <= 0 ){
        return /*something*/;
    }else{
        return /*something else*/;
    }
}
  

Прочитав данное вам определение f(x) , вы можете понять, каким /*something*/ и /*something else*/ должно быть.

Затем вас попросят «протестировать» вашу реализацию. Вы делаете это, видя, какие значения f возвращает ваша main функция, которая будет выглядеть:

 int main(void){

    printf("f(1) is %dn", f(1));
    printf("f(13) is %dn", f(13));
    /* .. more tests here if you want .. */

    return 0;
}
  

Ответ №7:

  • Вы определили factorial () функцию внутри основной функции. Это не разрешено. Вам нужно удалить всю функцию из main.
  • Вы сделали f(x) = f(x - 1) 2; . Здесь у вас есть функция в левой части присваивания, которая неверна. Также я не мог понять, что было причиной такой попытки.

Код, который требуется для компьютерной рекурсивной функции, является:

 #include <stdio.h>

int main (void)
{
  int x, y;
  printf ("nEnter x: ");
  scanf ("%d", amp;x);
  y = f (x);
  printf ("n%dn", y);
  return 0;
}

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

Я не мог понять, почему функция factorial появилась на вашем пути. Возможно, вы хотели модифицировать его и реализовать данную проблему.

Ответ №8:

 #include<stdio.h>
int fun(float i){
int p;
if(i<=0){
return 0;
 }
else{
i-=1;
p=fun(i) 2;
 }
return p;
}
void main(){
float i;
printf("Enter the number: ");
scanf("%f",amp;i);
printf("nThe output is %d",fun(i));
}
  

Проверьте это.

Ответ №9:

Я думаю, это то, что вам нужно. #включить int f(int x);

 int main(void){
    int result = f(x);
    printf("10! is %d", result);
    return 0;
}

int f(int x) {
    if (x <= 0) return 0;
    return x*f(x-1) 2; // No more error here. This is where recursion begins
}
  

Кстати, это не факториальная функция.

Комментарии:

1. Нет -1 от меня 🙂 Однако для вопросов с тегами «меньше значит больше» часто применяется принцип «меньше значит больше».