荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jek (一步一脚印), 信区: Program
标  题: Re: 一道怪题
发信站: BBS 荔园晨风站 (Mon Sep 25 11:46:37 2000), 转信


【 在 PENNY (你怎麽可以這樣糊塗) 的大作中提到: 】
: 【 在 jek (一步一脚印) 的大作中提到: 】
: : 下面程序的结果是120.但是如果把第5行的abs(1)改成1的话,则程序结果为1.
: : (第五行 i+1 中至少要一个有abs才会得到120的结果,例如改为abs(i)+1
: :   也能得到120)
: : 试分析为什么会有这不同的结果.
: : int fact()
: : {
: : static int i=5;
: : if(i==0) {return(1); }
: : else { i=i-1; return(( i+abs(1))*fact()); }
:     既然i是全局变量我认为正确结果应该是1,如果这个程序是为了
        按常规考虑的话,结果1是正确的,但问题是加了abs后为什么会
        改变结果呢,而且这结果似乎还有规律,就是使i+1的值都后
        移了一个数,本来他们的值应该是{0,1,2,3,4}的,结果却变成
        {1,2,3,4,5},这由如何解释呢?
: 展现abs函数的bug的话就没什么好说了,如果是要展现什么高超技巧
        这可以说是abs函数的bug吗?
: 的话我实在是看不懂了。
: : }
: : main(){
: : printf("factor or 5=%d\n",fact());
: : }
: : 谁能顺便写写函数abs()的源码?


--
  决不再平凡
  寂寞的鸵鸟总是一个人奔跑,孤独的飞鹰总是越飞越高...

※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.1.118]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店