C语言递归函数,f3=2f2-f1;

我编了一个程序,总是提示错误。求指正。#include<stdio.h>voidfn(intn){inti,s=2;intf1=1,f2=1,f3;for(i=3;i<=... 我编了一个程序,总是提示错误。求指正。

#include<stdio.h>
void fn(int n)
{
int i,s=2;
int f1=1,f2=1,f3;
for(i=3;i<=n;i++)
{
f3=3*f2-f1;
s+=f3;
f1=f2;
f2=f3;
}
printf("%d",s);
}
void main()
{
int fn(int n);
int n;
scanf("%d",&n);
fn(int n);

}
展开
 我来答
小白考研
2014-12-03 · TA获得超过3535个赞
知道小有建树答主
回答量:676
采纳率:100%
帮助的人:170万
展开全部
先提一下,你这个不是函数的递归,函数递归的定义是“调用函数本身”,你的fn()函数里面直接执行完然后printf打印,没有调用自身。
完整的源代码:
#include<stdio.h>

void fn(int n)
{
int i,s=2;
int f1=1,f2=1,f3;
for(i=3;i<=n;i++)
{
f3=2*f2-f1; //这里是2
s+=f3;
f1=f2;
f2=f3;
}
printf("%d",s);
}

int main()
{
//int fn(int n); 这条语句不用,因为这条语句的作用是申明函数fn,可是你的fn函数本来就在main()函数前面,所以不用申明,如果fn()放在main后面就可以了
int n;
scanf("%d",&n);
fn(n); // fn(int n);调用函数时,不能再声明参数的类型。

return 0; //main()函数最好带上返回值,这样才能告诉编译器你的程序正常运行退出了,
//当然,不返回,将int main()变为void main()也能得到曾雀结果,但不正规
}
来自:求助得到的回答
没事看看1111
2014-12-03 · TA获得超过266个赞
知道小有建树答主
回答量:103
采纳率:0%
帮助的人:85.7万
展开全部
#include<stdio.h>
void fn(int n)
{
int i,s=2;
int f1=1,f2=1,f3;
for(i=3;i<=n;i++)
{
f3=2*f2-f1;  //这里应该是2*f2
s+=f3;
f1=f2;
f2=f3;
}
printf("%d",s);
}
int main()//main有返回值,为int
{
   void fn(int n); //声明函数时返回类型和定义的函数的返回类型一致
   int n;
   scanf("%d",&n);
   fn(n);  //调用函数时不用加参数的类型
   return 0;
}

看书时要仔细。满意请采纳

追问
你用的是什么编译器?
追答
VC++6.0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
岔路程序缘

2014-12-03 · TA获得超过8.9万个赞
知道大有可为答主
回答量:9918
采纳率:93%
帮助的人:3398万
展开全部
能够运行了:
#include<stdio.h>
//void fn(int n)改成下一行。定义时要与主函数中声明的类型(int fn(int n);)相同,此处不能再用void。
int fn(int n)
{
int i,s=2;
int f1=1,f2=1,f3;
for(i=3;i<=n;i++)
{
f3=3*f2-f1;
s+=f3;
f1=f2;
f2=f3;
}
printf("%d",s);
return 0;//增加这一行。因为函数定义为int类型,必须要有返回值,此处不需要返回任何值,可以用返回0代替。
}
void main()
{
int fn(int n);
int n;
scanf("%d",&n);
// fn(int n);改成下一行。调用函数时,不能再声明参数的类型。
fn(n);
}
当输入3、4、5、6......时,分别打印出来:4、9、22、56......
追问
为什么要有返回值呢。我定义了void了。
追答
只能二选一,也就是,可以选int,也可以选void,但前后不能出现矛盾。如果你想保持定义成void,那么你在主程序中声明的时候就不要再用int fn(int n);了,只能改成:void fn(int n);。

另一个正确的写法我列在下面,选哪一个看你的爱好,两者都是正确的。
#include
void fn(int n)
{
int i,s=2;
int f1=1,f2=1,f3;
for(i=3;i<=n;i++)
{
f3=3*f2-f1;
s+=f3;
f1=f2;
f2=f3;
}
printf("%d",s);
}

void main()
{
// int fn(int n);要保留前面的void,这个地方就要改成下一句。
void fn(int n);
int n;
scanf("%d",&n);
// fn(int n);不管怎样,这一句一定要改成下一行。调用函数时,不能再声明参数的类型。
fn(n);
}

说明:我个人爱好使用int。其中有一个重要原因是标准的C程序中没有void这个选项,只能用int,所以平时也就尽量使用int了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爷已戒烟很多年
2014-12-03 · TA获得超过667个赞
知道小有建树答主
回答量:168
采纳率:100%
帮助的人:130万
展开全部
主函数改成这样就好了
void main()
{
int n;
scanf("%d",&n);
fn(n);

}
不明白可以继续问
更多追问追答
追问
这样改还是不行
追答
把你报的错误贴出来,顺便贴出你得编译器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式