2011-06-02 29 views
0

嘿家伙!我被分配了这个程序,它非常简单,并且不需要很长时间就可以编写代码,但我无法运行它。没有打印,我认为这是因为它进入了一个无限循环。只是寻找解决这个问题。家庭作业-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; 
} 
+4

这是一个窍门。它涉及到缩进代码,以使'{'和'}'内的项目前面有四(4)个额外的空格。如果您正确缩进代码,则可能会看到您创建的一些问题。 – 2011-06-02 01:50:15

+0

在适当的地方随处添加printf并尝试调试。嗯,将阶乘移动到一个单独的方法将是一个很好的起点。 – CharithJ 2011-06-02 01:54:42

+0

或者完全删除阶乘,因为它从未实际使用过。 – trutheality 2011-06-02 01:56:16

回答

1

你已经定义了在主要内的阶乘函数是不可能的。将它的定义从main()中分离出来,并从main()中调用它。

希望这个工程。首先纠正这一点,然后只能做一些事情。

2

我看到这个不正确吗? 为什么有一个

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

在你的int因子函数中?

+0

即将发表相同的评论。程序中是否有任何名为f()的函数?特别是,这是完整的代码还是其中的一部分? – afaolek 2011-06-02 02:02:59

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

  2. 你不主要调用阶乘。

1

你想是这样的:

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

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

附:感谢您对作业的诚实态度!

-1

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

顺便说一句,这不是一个阶乘函数。

+0

这不是分配的正确实施。 – user505255 2011-06-02 02:36:12

+0

没有-1从我:)但是,“更少更多”往往持有的家庭作业标记的问题。 – 2011-06-02 02:37:24

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.

0

你被要求执行f(x)定义为:

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

所以,首先,忘掉阶乘,我猜你抓着它作为例子或递归函数,但是这ISN”你在这里被要求做什么。

您需要实现的功能f,和实施应该是这样的:

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

从阅读的,你给f(x)的定义,你可以计算出/*something*//*something else*/应该是什么。

然后,你被要求“测试”你的实现。你这样做,通过看到的值从main功能f回报这将是这样的:

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
  • 您已经定义里面主要功能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
#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)); 
} 

检查了这一点。