循环中的循环——浅谈ES的循环语句实现
其实我不想打字的……还是说思路,因为我举实例很容易举错……
大家都知道,ES的循环是通过狂按等号实现的。
那么,循环中的循环就是在不出错的情况下适时候跳出循环,使循环语句无效。这就跟VB中的Exit Do 是一样的。
例:
Do While A > 1
A = A - 1
Loop
可以改成
Do while 2 > 1 '死循环
A = A - 1
If A > 1 Then Exit Do
Loop
于是,在ES中,我们有
.5(A-1)(Sgn(1-A)+1)+....(以后的语句+控制) --> A
缺陷:A=0时是显而易见的。考虑更换函数为isn和isp,则
(A-1)*isn(A-1)+(....)*isp(A-1) --> A
这种转换方法实质上就是变相的If。 当然这种循环不能实现真正意义上的循环。 我觉得给一个实例来研究一下比较好,Σ也可以起到循环作用。 我以前也有类似想法,不过我的想法是用一个变量做记号例如用B,进入内部循环之前把B赋值为1,出来后赋值为0,以达到控制目的,这种方法的一个显著缺点就是在内存寸土寸金的计算器上浪费内存,但是更容易控制,例如: while (true){
exp1;
exp2 ;
exp3 ;
while(true){
inexp1;
inexp2;
inexp3;
if(condition1) break;
}
exp4
if(condition2) break ;
}
改成while (true){
if(out) exp1;
if(out) exp2 ;
if(out) exp3 ;
out = false;
inexp1;
inexp2;
inexp3;
if(condition1) out = true;
if(out) exp4
if(out) if(condition2) break ;
}
在某些情况下我这个方法可以节约代码空间,我现在学习很忙(中科大的学风大家可能听说过),如果有时间(估计要很长)我会搬出算法复杂度理论来计算一下什么时候选用哪种方法更好 比较早发布的那个解方程里就是用的循环思想(不过做出来是错的-.-。。而且代码巨长。。。),当然,那个只有跳进去的,没有跳出来的
(后来的那个二分法就不是了,但是空间节省得多,而且结果正确) 我觉得给一个实例来研究一下比较好,Σ也可以起到循环作用。
鸣人之子 发表于 2010-4-2 23:24 http://www.cncalc.org/images/common/back.gifΣ只能做计算的循环,赋值、组合赋值、定积分都不能套用。本来就循环的东西进行循环,没什么实用意义的。 总之还是需要结合一个有一定复杂度的实例来研究
页:
[1]