家庭作业-C编程 - 递归程序
嘿家伙!我被分配了这个程序,它非常简单,并且不需要很长时间就可以编写代码,但我无法运行它。没有打印,我认为这是因为它进入了一个无限循环。只是寻找解决这个问题。家庭作业-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;
}
你已经定义了在主要内的阶乘函数是不可能的。将它的定义从main()中分离出来,并从main()中调用它。
希望这个工程。首先纠正这一点,然后只能做一些事情。
我看到这个不正确吗? 为什么有一个
f(x)= f(x-1)+2;
在你的int因子函数中?
即将发表相同的评论。程序中是否有任何名为f()的函数?特别是,这是完整的代码还是其中的一部分? – afaolek 2011-06-02 02:02:59
你已经在main中声明了factorial。
你不主要调用阶乘。
你想是这样的:
int factorial(int n) {
//calculate the factorial
return result;
}
int main() {
int result = factorial(10); // Calculate 10!
printf("10! is %d", result);
}
附:感谢您对作业的诚实态度!
我认为这是你需要的。 #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
}
顺便说一句,这不是一个阶乘函数。
这不是分配的正确实施。 – user505255 2011-06-02 02:36:12
没有-1从我:)但是,“更少更多”往往持有的家庭作业标记的问题。 – 2011-06-02 02:37:24
该代码不应按原样编译。你不能在C中定义另一个函数,所以你需要在main()
之外创建另一个函数,然后调用它。
我建议您完全移除factorial()函数,因为它看起来与此作业不相关。
程序的基本结构应该是:
#include <stdio.h>
int f(int x)
{
//definition of recursive function
}
int main(void)
{
//call to recursive function
return 0;
}
分配给你的递归函数的定义;你只需要把它翻译成C.
你被要求执行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;
}
- 您已经定义里面主要功能
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;
}
}
我不明白为什么阶乘函数进了你的方式。可能你可能想修改它并执行给定的问题。
#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));
}
检查了这一点。
这是一个窍门。它涉及到缩进代码,以使'{'和'}'内的项目前面有四(4)个额外的空格。如果您正确缩进代码,则可能会看到您创建的一些问题。 – 2011-06-02 01:50:15
在适当的地方随处添加printf并尝试调试。嗯,将阶乘移动到一个单独的方法将是一个很好的起点。 – CharithJ 2011-06-02 01:54:42
或者完全删除阶乘,因为它从未实际使用过。 – trutheality 2011-06-02 01:56:16