帮我看看着段c的问提

CppPrimer 2003-08-25 08:32:22
int fact()
{
static int i=5;
if(i=0) {return(1); }
else { i=i-1; return(( i+abs(1))*fact()); }
}

main(){
printf("factor or 5=%d\n",fact());
}
为什么将abs(1)换成1 结果会不同呢 ????????
...全文
24 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
kundy 2003-08-25
  • 打赏
  • 举报
回复
请记着include "math.h"头文件!

1.
int fact()
{
static int i = 5;
if (i == 0) {
return (1);
}
else {
i = i - 1;
return (( i + 1) * fact());
}
}

2.
int fact()
{
static int i = 5;
if (i == 0) {
return (1);
}
else {
i = i - 1;
return (( i + abs(1)) * fact());
}
}

我在.net(VC7.0) + win server 2000下编译运行结果均为120,^_^
CppPrimer 2003-08-25
  • 打赏
  • 举报
回复
我在VC和JBUILDER下面变异结果都一样
但是在C++BUILDER下面就一样了

想知道为什么
jrhjrh 2003-08-25
  • 打赏
  • 举报
回复
i=1 => i==1
zhang,qiuping 2003-08-25
  • 打赏
  • 举报
回复
#include <math.h>
#include <stdio.h>

int fact()
{
static int i=5;
if(i==0) {return(1); }
else { i=i-1; return(( i+1)*fact()); }
// else { i=i-1; return(( i+abs(1))*fact()); } 这样也正确。Vc++6.0+WinXp下编译通过。

}

main(){
printf("factor or 5=%d\n",fact());
}
CppPrimer 2003-08-25
  • 打赏
  • 举报
回复
改称i==0诗一样的结果 还是有问题啊
kundy 2003-08-25
  • 打赏
  • 举报
回复
if(i=0){return(1);

这个语句出问题啦~~


i=0是赋值语句,该语句赋值成功后,表达式的值不为0,因而执行return(1)啦 ^_^

将if(i=0)改为if(i==0)即可。
point_to 2003-08-25
  • 打赏
  • 举报
回复
int fact()
{
static int i=5;
if(i==0) {return(1); }

// else { i=i-1; return(( i+abs(1))*fact()); }
//于下面的等效,结果一样!所以结果不一样,可能是括号错误。
else
{
i=i-1;
return(( i+ 1 )*fact());
}
}

main()
{
printf("factor or 5=%d\n",fact());
}
CppPrimer 2003-08-25
  • 打赏
  • 举报
回复
NOT dead loop

if(i==0) return 了
new1mm 2003-08-25
  • 打赏
  • 举报
回复
a dead loop?

how can you return to main?
point_to 2003-08-25
  • 打赏
  • 举报
回复
if(i=0) -> if(i==0)

69,337

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧