C语言网

 找回密码
 加入社区!

QQ登录

只需一步,快速开始

查看: 762|回复: 7

高手看下求n的阶乘的算法 [复制链接]

Rank: 1

主题
0
帖子
5
C币
10 枚
在线时间
0 小时
发表于 2010-3-7 15:09:03 |显示全部楼层
分享到:
下面是求n的阶乘的算法,因为某种原因运行不起来,不知道问题出在哪里,系统提示的错误是关于倒数第三行local variable “n” used without having been initialized,但我令int n=0以后还是运行不了,请高手帮忙看下,提出修改意见
#include "stdio.h"
float fac(int n)
{ float f;
if(n>1)f=fac(n-1)*n;
else if(n==0||n==1)f=1;
else f=-1;
return f;
}
void main()
{ int n;
float y;
printf("Input a integer number:");
scanf("%d,&n");
y=fac(n);
if(y<0)printf("Error:%d<0",n);
else printf("%d!=%.0f",n,y);
}

Rank: 1

主题
0
帖子
1
C币
1 枚
在线时间
0 小时
发表于 2010-3-7 17:37:39 |显示全部楼层
float 改为长整型long 定义fac函数 建议用{long f;int n;if(n==0||n==1) f=1;else if(n>1) f=fac(n-1)*n;else f=-1}

Rank: 1

主题
0
帖子
14
C币
15 枚
在线时间
1 小时
发表于 2010-3-31 12:46:46 |显示全部楼层
我先可能是:
在c语言中,对于外面定义的函数,需要进行先声明,在主函数中才能调用,试着声明一下吧1 2# zchongling

Rank: 1

主题
0
帖子
24
C币
23 枚
在线时间
2 小时
发表于 2010-3-31 21:26:30 |显示全部楼层
就是!你的if(n>1)f=fac(n-1)*n; 这一步的f(1)没有先赋值,而一楼正是指出了这个问题。还有scanf("%d,&n");你的”打错了吧

Rank: 4

主题
11
帖子
164
C币
292 枚
在线时间
24 小时
发表于 2010-4-20 08:46:58 |显示全部楼层
直接用递归函数呀,
int a(int b)
{
return(b*a(b-1))
}
这就是求阶乘

Rank: 1

主题
6
帖子
9
C币
16 枚
在线时间
3 小时
发表于 2011-1-2 21:12:15 |显示全部楼层
int fact(int k)
{
int i,y=1;
for(i=2;i<=k;i++)
y=y*i;
return y;
}

Rank: 1

主题
0
帖子
1
C币
1 枚
在线时间
0 小时
发表于 2011-1-2 23:27:00 |显示全部楼层
谁教你scanf("%d,&n");的,你们不懂别乱说,把n后的“拿到d后就行了
scanf("%d",&n);

Rank: 3Rank: 3

主题
23
帖子
244
C币
313 枚
在线时间
17 小时
发表于 2011-1-5 10:43:10 |显示全部楼层
#include "stdio.h"
float fac(int n)
{ float f;
if(n>1)f=fac(n-1)*n;
else if(n==0||n==1)f=1;
else f=-1;
return f;
}
void main()
{ int n;
float y;
printf("Input a integer number:");
scanf("%d",&n);
y=fac(n);
if(y<0)printf("Error:%d<0",n);
else printf("%d!=%.0f\n",n,y);
}
木木竹林
您需要登录后才可以回帖 登录 | 加入社区!

C语言 ( 粤ICP备11042647号-2 )

GMT+8, 2012-5-20 17:36

©2009-2011 cyuyan.com.cn

回顶部