求阶乘之和其中隐形的错误,能表示的两种不同运行代码,代码小白从繁到精的心得

本文讲述了作者在解决1-99阶乘求和问题时遇到的错误,发现循环中ret未重置导致结果错误。通过分析,强调了代码严谨性、优化和核心竞争力的重要性。最后,作者分享了无需重置ret的简洁解决方案。
摘要由CSDN通过智能技术生成

       昨天偶然回顾之前写过的一道题:求1-99阶乘的和。便用了之前所用的方法来完成这道题,因为是演示,所以用1-3阶乘的和更为妥当,如以下所示:

随即我进行了运行,得出的结果却是15,这明显不符合!1+!2+!3的和,和应该是9才对,那么问题到底出在哪里了呢?只有一步一步跟着程序走才能知道自己错在哪里了。进入循环,n等于1,同时也小于等于3,满足条件进入内部循环,得:

                                i=1,故n=1=i,ret=ret*i=1*1=1;sum=sum+ret=0+1=1

然后i++为2,2>n=1不符合条件,进入下一次循环n++为2,n=2<=3成立,进入内部循环,得:                                      i=1,ret=ret*i=1*1=1;i=2,ret=ret*i=1*2=2;sum=sum+ret=1+2=3

然后i++为3,3>n=2不符合条件,进入下一次循环n++为3,n=3<=3成立,进入内部循环,得:

                                 i=1,ret=ret*i=2*1=2;i=2,ret=ret*i=2*2=4;i=3,ret=ret*i=4*3=12

                                 sum=sum+ret=3+12=15

所以最后打印出来是15,那么问题出在哪呢?问题就出在ret上,每一次循环中ret运用的都是上一次循环中ret的值,没有将其再次赋值为1,这导致了每一次ret=ret*i计算的数都在叠加,故也影响到后面sum=sun+ret的计算,最终运行错误。

那正确的代码应该是怎样的呢?哪颗螺丝松了就拧紧哪颗螺丝,将ret再次赋值为1的语句加上就行了,如图所示:

结果为9,运行正确。

然而在今日的C语言课上,我学习到了更加精确简便的代码来完成这到题,它既不需要将ret重新赋值,也不需要二次循环,此代码如图所示:

由此运行就不用将ret重新赋值为1。运行结果也为9,而且更为精简正确。

心得:编写代码是严谨的,也是有活力的。只是会写代码并不能代表什么,而是要比别人更精更简更会变通更有逻辑更有效率才更有核心竞争力。我的计算机之路任重而道远!

                               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值