新しいアカウントで始めました。

身の回りの出来事や写真が中心です。

F#イジってみました。cametan_42さんのコメントから

2022-06-12 21:42:43 | F#

 cametan_42さんがコメントしてくれた書き込みはこちら。F#と似ているOcamlのコードですが、ものすごく参考になります。F#でも動いたのですが、若干の違いは有るようです。

末尾再帰は、説明を読んでも、ピンと来ないです。(涙&&哀)


コメント (2)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« F#イジってみました。Cametan... | トップ | 末尾再帰の説明のコメントを... »
最新の画像もっと見る

2 コメント

コメント日が  古い順  |   新しい順
末尾再帰 (cametan_42)
2022-06-12 22:46:06
> 末尾再帰は、説明を読んでも、ピンと来ないです。(涙&&哀)

うん、僕も最初はピンと来ませんでした。
だから大丈夫、です。
繰り返しますが、関数の再帰呼び出しの際、関数の再帰呼び出し「しか」してないものを末尾再帰、と言います。
例えばC言語で、1+2+3+ ・・・ + nを計算せよ、と言った場合。

/* これは末尾再帰じゃない */

int sum(int n) {
 if (n == 0) {
  return 0;
 } else {
  return n + sum(n - 1); /* 再帰呼出しに何か足してる */
}
}

上の関数のように「再帰した関数」に足したり、引いたり、または別の関数を再帰関数の外側で使ったりしたら、これは末尾再帰じゃないです。

/* 末尾再帰の例 */

int sum(int n, int acc) {
 if (n == 0) {
  return acc;
 } else {
  return sum(n - 1, n + acc); /* 再帰呼出ししかしていない */
 }
}

これは再帰としてsumしか呼んでません。この形式の再帰を末尾再帰、と言うんです。
結果、末尾再帰の特徴は

「関数の引数内で計算を行う」

パターンが多いです。
返信する
末尾再帰の説明有難うございます (isam)
2022-06-13 06:19:41
 cametan_42さんの説明をもとに、古都linの太郎さんやK本の長尾さんの説明とマイクロソフトのF#の説明を見直してみます。これで分からないなら、一生無理という気持ちで。(笑)
 今の感じではcametan_42さんの説明が一番ピンとくるように思います。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

F#」カテゴリの最新記事