recHoge1(term,arg...){
 dobefore()...
 if(term)recHoge1(term,arg...);
}
loopHoge1(term,arg...){
 while(term){
  dobefore()...
 }
}
再帰は無意味、使う必要なし
recHoge2(term,arg...){
 dobefore()...
 if(term)recHoge2(term,arg...);
 doafter()...
}
loopHoge2(term,arg...){
 while(term){
  popargstack();
  dobefore()...
  if(term)continue;
  pushargstack();
  doafter()...
 }
}
再帰で有意味、この場合使える
pushargstack(); popargstack();
ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ
たったこれだけの内容