深痛教训——3.29
死亡回放
错误的
L[++s]=R[s-1]+1;
正确的
s++;
L[s]=R[s-1]+1;
分析
关于 \(L[++s]=R[s-1]+1;\) 这一行代码,表示的是将 \(R[s-1]+1\) 复制给 \(L[++s]\) ,是从右往左执行的,也就是说在 \(++s\) 之前就已经计算了 \(R[s-1]\) ,也就是说这个 \(R[s-1]\) 实际上表示 \(R[s-2]\) 。
所以为了避免歧义或发生纸张错误,应写成 \(s++;L[s]=R[s-1]+1;\) 。
写成 \(L[++s]=R[s]+1\) 也是可以的,但是为了避免歧义,还是写成上面的形式好。
现在知道为什么伪代码是 \(a←b\) 了。
不是为啥我前几道也是那么打的只有 \(8\) 出错了啊?