Homework-C Программирование - Рекурсивная программа - PullRequest
0 голосов
/ 02 июня 2011

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

Назначение:

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

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;
}

Ответы [ 9 ]

2 голосов
/ 02 июня 2011

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

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

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

#include <stdio.h>

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

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

Назначение дает вам определение рекурсивной функции; вам просто нужно перевести это на C.

2 голосов
/ 02 июня 2011

Я вижу это неправильно?Почему в вашей функции факторной функции есть

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

?

1 голос
/ 02 июня 2011

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

int factorial(int n) {
    //calculate the factorial
    return result;
}

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

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

1 голос
/ 02 июня 2011
  1. Вы объявили факториал внутри main.

  2. Вы не вызываете факториал в main.

1 голос
/ 02 июня 2011

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

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

0 голосов
/ 21 марта 2014
#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",&i);
printf("\nThe output is %d",fun(i));
}

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

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

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

#include <stdio.h>

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

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

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

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

Вас просят реализовать 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 %d\n", f(1));
    printf("f(13) is %d\n", f(13));
    /* .. more tests here if you want .. */

    return 0;
}
0 голосов
/ 02 июня 2011

Я думаю, это то, что тебе нужно. #включают 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
}

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

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