家庭作业-C程序设计 - 递归程序

时间:2011-06-02 01:47:21

标签: c recursion

嘿伙计们!我被分配了这个程序非常简单,并且编写代码的时间不长,但我无法运行它。什么都没打印,我认为这是因为它进入无限循环。只是想找到解决方法。

分配:

  

编写并测试递归函数   返回的值   遵循递归定义:

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 个答案:

答案 0 :(得分:2)

我看到这个错误吗? 为什么会有

  

F(X)= F(X-1)2;

你的int factorial函数中的

答案 1 :(得分: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。

答案 2 :(得分:1)

您已在主中定义了阶乘函数,这是不可能的。从main()中分离其定义,并从main()调用它。

希望这有效。首先纠正这一点,然后才能做到。

答案 3 :(得分:1)

  1. 你已在main中声明了factorial。

  2. 你不是在主要部门中称为阶乘。

答案 4 :(得分:1)

你想要这样的东西:

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

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

P.S。谢谢你诚实地做家庭作业!

答案 5 :(得分:0)

要求您实施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;
}

答案 6 :(得分:0)

  • 您已在主要功能中定义了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;
  }
}

我无法理解为什么阶乘函数会影响你。可能你可能想修改它并实现给定的问题。

答案 7 :(得分:0)

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

检查一下。

答案 8 :(得分:-1)

我认为这就是你需要的。     #包括     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
}

顺便说一下,这不是一个因子函数。