2,619
次編輯
Tankianting(討論 | 貢獻) |
Tankianting(討論 | 貢獻) |
||
行 37: | 行 37: | ||
===迴圈如何變成尾遞迴=== | ===迴圈如何變成尾遞迴=== | ||
<math> | |||
bodyExp_1[, bodyExp_2,...]\ | \begin{align} | ||
\} | & while(condFunction(x~[,y,...]))\{\\ | ||
& bodyExp_1[, bodyExp_2,...]\\ | |||
& \}\\ | |||
\end{align} | |||
</math> | |||
其中 $bodyExp_n$ 可以為下列之一: | 其中 $bodyExp_n$ 可以為下列之一: | ||
* <math>oldVar_j := f(calledVar_1, [calledVar_2,...])</math> | |||
* <math>newVar_j = f(calledVar_1, [calledVar_2,...])</math> | |||
* <math>f(expression_i)</math> 當然還有部分調用、全部調用 | |||
* <math>isolatedVar</math> | |||
* <math>consonant</math> | |||
可以分析 | 可以分析 <math>oldVar_j</math> 有哪些?<math>newVar_j</math>有哪些? | ||
設 | 設<math>oldVarSet = \{oldVar_i|i = 1,2,...,n\}</math>,<math>calledVarSet = \{calledVar_i|i = 1,2,...,n\}</math> 則 | ||
<math>iteratedVarSet = oldVarSet\cap calledVarSet</math> | |||
while 迴圈就可以變成新的遞迴函數 | while 迴圈就可以變成新的遞迴函數 <math>recFunc</math>,如下: | ||
<math>& recFunc(all~x~from~iteratedVarSet)\{\\ | |||
& if(condFunction)\{\\</math> | |||
newBodyExp_i\ | & newBodyExp_i\\ | ||
return~~recFunc(...)\ | & return~~recFunc(...)\\ | ||
\} | & \} | ||
\} | \}</math> | ||
==對字串的思考== | ==對字串的思考== |