程序的结果是120.但是如果把第5行的abs(1)改成1的话,则程序结果为1,不知道为什么?

wangwpf 2003-08-22 11:31:18
下面程序的结果是120.但是如果把第5行的abs(1)改成1的话,则程序结果为1.
试分析为什么会有这不同的结果.
本人用的是BC++3.1
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());
}

...全文
114 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fupa0 2003-08-23
  • 打赏
  • 举报
回复
这个问题很经典
在很多地方看到过
改成if(i==0)
好像跟编译器相关
iceheart 2003-08-23
  • 打赏
  • 举报
回复
阶乘
wowowowo 2003-08-23
  • 打赏
  • 举报
回复
abs(1)改成1 好像不影响什么吧 if(i=0)改为if(i==0) 都是120
不改的话 是死循环
RookieStar 2003-08-23
  • 打赏
  • 举报
回复
编译器的问题吧,具体的不清楚
ezhou 2003-08-23
  • 打赏
  • 举报
回复
为什么我的运行结果都是1呢?
xiaomimiya 2003-08-23
  • 打赏
  • 举报
回复
跟编译器相关
kweio 2003-08-23
  • 打赏
  • 举报
回复
?!
wbh0360 2003-08-23
  • 打赏
  • 举报
回复
主要是编译器的解析顺序不同,
所以要了解编译器的特性!
woaichenyu 2003-08-23
  • 打赏
  • 举报
回复
这个问题还是有点经典的
chengsion 2003-08-23
  • 打赏
  • 举报
回复
int fact()
{
static int i=5;
//if(i=0) {return(1); }//modify
if (i==0) return 1;
else { i=i-1; return(( i+abs(1))*fact()); }


main(){
printf("factor or 5=%d\n",fact());
}
wingclouds 2003-08-23
  • 打赏
  • 举报
回复
我用tc2.0和楼主现象一样!
lifanxi 2003-08-23
  • 打赏
  • 举报
回复
在Borland的编译器都会这样的。
以前讨论过:http://expert.csdn.net/Expert/TopicView1.asp?id=1842715
我个人感觉是由于二元运算符左右两个表达式估值的顺序是undefine的,所以造成这个现象。编译器可以先算左边也可以选算右边,得出的就是两种不同的结果。
tonybaobao 2003-08-22
  • 打赏
  • 举报
回复
改正错误之后(i==0),我在VC.net里面运行,两种情况都一样,是120。
tonybaobao 2003-08-22
  • 打赏
  • 举报
回复
没道理的,应该都是1啊!
RookieStar 2003-08-22
  • 打赏
  • 举报
回复
递归的终止条件错了,应该是:if(i==0) return 1;

69,371

社区成员

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

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