Nero 发表于 2010-4-2 22:29:37

循环中的循环——浅谈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。

Nero 发表于 2010-4-2 22:30:13

当然这种循环不能实现真正意义上的循环。

鸣人之子 发表于 2010-4-2 23:24:40

我觉得给一个实例来研究一下比较好,Σ也可以起到循环作用。

zasdfgbnm 发表于 2010-4-3 09:00:46

我以前也有类似想法,不过我的想法是用一个变量做记号例如用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 ;
}

zasdfgbnm 发表于 2010-4-3 09:53:11

在某些情况下我这个方法可以节约代码空间,我现在学习很忙(中科大的学风大家可能听说过),如果有时间(估计要很长)我会搬出算法复杂度理论来计算一下什么时候选用哪种方法更好

hcz 发表于 2010-4-3 15:20:30

比较早发布的那个解方程里就是用的循环思想(不过做出来是错的-.-。。而且代码巨长。。。),当然,那个只有跳进去的,没有跳出来的
(后来的那个二分法就不是了,但是空间节省得多,而且结果正确)

hcz 发表于 2010-4-3 15:21:42

我觉得给一个实例来研究一下比较好,Σ也可以起到循环作用。
鸣人之子 发表于 2010-4-2 23:24 http://www.cncalc.org/images/common/back.gifΣ只能做计算的循环,赋值、组合赋值、定积分都不能套用。本来就循环的东西进行循环,没什么实用意义的。

hcz 发表于 2010-4-5 09:41:36

总之还是需要结合一个有一定复杂度的实例来研究
页: [1]
查看完整版本: 循环中的循环——浅谈ES的循环语句实现