下へ
>  2002/01/16 (水) 23:39:52        [mirai]
> > int kaijo(int n)
> > {
> >   if(n==0)return 1;
> >   else return n*kaijo(n-1);
> > }
> > こういう関数があったとき
> > 再帰は一番最後にあるのでスタックを積む必要がないので反復と同様になるだろ
> > で、コンパイラなりインタプリンタなりがこれを解釈して
> > 再帰を反復にしてくれる機能
> よくよく考えるとこれは末尾再帰ではないと思うが

#define kaijo(n) kaijo_(n,1)
int kaijo_(int n, int x) {
  if(n==0)return x;
  else return kaijo_(n-1,n*x);
}

こうすれば末尾再帰になるな

参考:2002/01/16(水)23時32分46秒

>  2002/01/16 (水) 23:32:46        [mirai]
> > 末尾再帰除去ってなによ?
> int kaijo(int n)
> {
>   if(n==0)return 1;
>   else return n*kaijo(n-1);
> }
> こういう関数があったとき
> 再帰は一番最後にあるのでスタックを積む必要がないので反復と同様になるだろ
> で、コンパイラなりインタプリンタなりがこれを解釈して
> 再帰を反復にしてくれる機能

よくよく考えるとこれは末尾再帰ではないと思うが

参考:2002/01/16(水)23時17分36秒

>  2002/01/16 (水) 23:28:32        [mirai]
> > treeをdumpするときとかに使わないか?
> STL使えそうな気がしないでもないな

そういえばへっぽこインタプリタの実装調べてたら再帰使ったコードが
書いてあった、あれは再帰使わないと果てしなく辛そう

参考:2002/01/16(水)23時24分44秒

>  2002/01/16 (水) 23:24:44        [mirai]
> > C++に移行して以来再帰なんて使ってないな、考えるの疲れるし読みにくいし
> treeをdumpするときとかに使わないか?

STL使えそうな気がしないでもないな

参考:2002/01/16(水)23時18分38秒

>  2002/01/16 (水) 23:22:13        [mirai]
> > C++に移行して以来再帰なんて使ってないな、考えるの疲れるし読みにくいし
> treeをdumpするときとかに使わないか?

treeのdumpが何を意味しているのか分かりません(´ー`)

参考:2002/01/16(水)23時18分38秒

>  2002/01/16 (水) 23:21:11        [mirai]
> > 末尾再帰除去ってなによ?
> int kaijo(int n)
> {
>   if(n==0)return 1;
>   else return n*kaijo(n-1);
> }
> こういう関数があったとき
> 再帰は一番最後にあるのでスタックを積む必要がないので反復と同様になるだろ
> で、コンパイラなりインタプリンタなりがこれを解釈して
> 再帰を反復にしてくれる機能

なるほどね、俺なら多分反復で書いちゃうな

参考:2002/01/16(水)23時17分36秒

>  2002/01/16 (水) 23:18:38        [mirai]
> > 関数の末尾で再起呼び出しを行った場合に
> > 新しいframeを作らずに現在のframeを上書きして処理を行う最適化手法だ
> C++に移行して以来再帰なんて使ってないな、考えるの疲れるし読みにくいし

treeをdumpするときとかに使わないか?

参考:2002/01/16(水)23時17分02秒

>  2002/01/16 (水) 23:17:36        [mirai]
> > メジャーな言語には末尾再帰除去が実装されるべき
> 末尾再帰除去ってなによ?

int kaijo(int n)
{
  if(n==0)return 1;
  else return n*kaijo(n-1);
}

こういう関数があったとき
再帰は一番最後にあるのでスタックを積む必要がないので反復と同様になるだろ
で、コンパイラなりインタプリンタなりがこれを解釈して
再帰を反復にしてくれる機能

参考:2002/01/16(水)23時12分40秒

>  2002/01/16 (水) 23:17:02        [mirai]
> > 末尾再帰除去ってなによ?
> 関数の末尾で再起呼び出しを行った場合に
> 新しいframeを作らずに現在のframeを上書きして処理を行う最適化手法だ

C++に移行して以来再帰なんて使ってないな、考えるの疲れるし読みにくいし

参考:2002/01/16(水)23時15分41秒

>  2002/01/16 (水) 23:15:41        [mirai]
> > メジャーな言語には末尾再帰除去が実装されるべき
> 末尾再帰除去ってなによ?

関数の末尾で再起呼び出しを行った場合に
新しいframeを作らずに現在のframeを上書きして処理を行う最適化手法だ

参考:2002/01/16(水)23時12分40秒

>  2002/01/16 (水) 23:12:40        [mirai]
> > 人は反復し、神は再帰する
> メジャーな言語には末尾再帰除去が実装されるべき

末尾再帰除去ってなによ?

参考:2002/01/16(水)23時12分00秒

>  2002/01/16 (水) 23:12:00        [mirai]
> > 過ちは人の常
> > バグ探しは神の業
> 人は反復し、神は再帰する

メジャーな言語には末尾再帰除去が実装されるべき

参考:2002/01/16(水)23時10分27秒

>  2002/01/16 (水) 23:10:27        [mirai]
> > 人は誤り 神は許す
> 過ちは人の常
> バグ探しは神の業

人は反復し、神は再帰する

参考:2002/01/16(水)23時06分26秒

>  2002/01/16 (水) 23:06:26        [mirai]
> > 詫びるだけだろ(;´Д`)許す許さないは本人次第だろ
> 人は誤り 神は許す

過ちは人の常
バグ探しは神の業

参考:2002/01/16(水)22時58分02秒

>  2002/01/16 (水) 22:58:02        [mirai]
> > 死ねば何でも許されるのか
> 詫びるだけだろ(;´Д`)許す許さないは本人次第だろ

人は誤り 神は許す

参考:2002/01/16(水)22時54分33秒

>  2002/01/16 (水) 22:54:33        [mirai]
> > 妖精さんを射精さんと見間違えた
> > 死んで詫びる(;´Д`)
> 死ねば何でも許されるのか

詫びるだけだろ(;´Д`)許す許さないは本人次第だろ

参考:2002/01/16(水)22時53分26秒

>  2002/01/16 (水) 22:54:33        [mirai]
> 妖精さんを射精さんと見間違えた
> 死んで詫びる(;´Д`)

( '-')ノ イク

参考:2002/01/16(水)22時50分27秒

>  2002/01/16 (水) 22:53:26        [mirai]
> 妖精さんを射精さんと見間違えた
> 死んで詫びる(;´Д`)

死ねば何でも許されるのか

参考:2002/01/16(水)22時50分27秒

2002/01/16 (水) 22:50:27        [mirai]
妖精さんを射精さんと見間違えた
死んで詫びる(;´Д`)

上へ