by
Anonymous Coward
on 2015年02月11日 20時16分
(#2759545)
同じ結果になるように実装しているのだから、どう違うのかといえば違いませんな。
コードについて言えば... int x を (static な生存期間をもつ現在位置ではなくて) auto な生存期間のものにするともうちょっと違う鴨。 C (なのかな、exit がそう書けるかどうか...?)だと main の引数は変更できないから(※1)別の関数名にする必要があり、 さらに脱出に exit 以外のものを使用する必要がありますが。
再帰とループの違いが全くわからん (スコア:2)
/* どうちがうのか、自分には全くわからない。gotoは0引数の自分への再帰でしょう? */
/* 末尾最適化できないのはコンパイラかプログラマがタコなだけ。 */
#include <stdio.h>
int x=0;
int main(){
main:
x++;
printf("%d\n",x);
if(x<100){
goto main;
}else{
exit 0;
}
}
#include <stdio.h>
int x=0;
int main(){
x++;
printf("%d\n",x);
if(x<100){
main();
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re:再帰とループの違いが全くわからん (スコア:0)
同じ結果になるように実装しているのだから、どう違うのかといえば違いませんな。
コードについて言えば...
int x を (static な生存期間をもつ現在位置ではなくて) auto な生存期間のものにするともうちょっと違う鴨。
C (なのかな、exit がそう書けるかどうか...?)だと main の引数は変更できないから(※1)別の関数名にする必要があり、
さらに脱出に exit 以外のものを使用する必要がありますが。
コンパイラがそう最適化するはず/べきだ、という話であれば、
極端に話「学生に数字を列挙せよ」というところからプログラミングといってるのと同じで話してるレベルがちょいと違う。
(学生が理解できないのは学生がタコなだけ、ですし)
※1 あーフリースタンディング環境がどうとかいう話は別でお願いね ^_-☆