谁能解释下这串代码中的for循环语句是怎么写出来的? 30
首先看序列的特征,第一个是2/1,第二个是3/2,第三个是5/3。
规律是从第二个开始:
分子是前一个数的分子分母之和。
分母是前一个数的分子。
所以你分别需要几个变量来储存分子和分母(对应题中的a和b)
设其中分子初始值n为2,分母d为1,则下次循环时,想要得到3/2,就需要令n'=n+d(分子为3+1),但如果提前修改了分子的值,则无法取到n=2这个数值,所以需要中间变量t来暂存n的值。
则有t=n,此时t=2,n=2。再执行n=n+d,则有n=3。将d的值设定为t的值有d=t即可。
通过以上步骤则可以在循环中得到n=2, d=1和n=3, d=2的两种状况。
再通过一个变量储存每一次的运算结果,设变量sum默认为0,则计算时有sum += n/d。
此解法与题中解法原理相同:
其中分子n为b,分母d为a,暂存t为e:
在第一次计算时应有n'=n+d,和d'=n两个步骤。
所以实现方式是首先保存n的初始值为t,因n=t,则有:
n'=n+d 和 d'=n,
n'=t+d 和 d'=t。
可见d'=t与题中a+=e相同,
我们来推理一下:
对d'=t 有 t==n,而n==n`+d,故有d'=t+d。所以可以写作d+=t。(同a+=e)
分母解决了。
看分子,分子显然为n'=n+d,所以此时应为n+=d。
而原题中的b+=a按照上述则为n'=n+d'=n+n,显然不符合实际情况,正确写法是b+=d。
结论是,题干有错误,你跑一下就发现结果不对劲了。
对题干中d的值,为上一次计算的a(d=a),在题干中有"d=a",所以我们引入这个新的d,为变量u。按照上述的内容u=d对吧。因为原本的d已经变为d'了,不能用n=n+d,所以用n'=n+u就对了。