トップページ > プログラム > 2015年09月12日 > fRaBt1iw

書き込み順位&時間帯一覧

4 位/167 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000210011106



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net

書き込みレス一覧

なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
334 :デフォルトの名無しさん[]:2015/09/12(土) 16:51:13.69 ID:fRaBt1iw
再帰は変数のスコープが分かりにくい

  static int[] loop(int[] a, int[] values) {
    int outer = 0;

    for (int inner = 0; inner < a.length; inner++)
      if (contains(values, a[inner]))
        a[outer++] = a[inner];

    return Arrays.copyOf(a, outer);
  }

  static int[] recursive(int[] a, int value) {
    return recursive(0, 0, a, value);
  }

  static int[] recursive(int outer, int inner, int[] a, int value) {
    if (inner >= a.length)
      return Arrays.copyOf(a, outer);

    if (a[inner] != value)
      a[outer++] = a[inner];

    return recursive(outer, inner + 1, a, value);
  }

  static boolean contains(int[] a, int value) {
    for (int i = 0; i < a.length; i++)
      if (a[i] == value)
        return true;
    return false;
  }
なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
335 :デフォルトの名無しさん[]:2015/09/12(土) 16:54:28.45 ID:fRaBt1iw
お分かりいただけただろうか。

ループではouterがinnerより広い範囲で使用されることが
明確にわかる。

ひるがえって再帰の方はどうだろうか。
outerとinnerの範囲は同じだ。これではどちらが
outerでどちらがinnerなのか全くわからない。
つまり、再帰のプログラムを書くというのは人類にはまだ早いのである。
なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
338 :デフォルトの名無しさん[]:2015/09/12(土) 17:22:13.97 ID:fRaBt1iw
>>336
違う。そういうことを言ってるんじゃない。
人類の歴史というのは変数のスコープとの戦いの歴史なんだよ。
プログラミング黎明期はグローバル変数を使いまくりだったが、
それでは信頼性が高いアプリケーションを作れないことが発覚した。
そこから構造化プログラミングやオブジェクト指向プログラミングといった
モジュール化の仕組みが発達した。変数のスコープを分かりづらくする
再帰というのは時代に逆行しているのだよ。
なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
341 :デフォルトの名無しさん[]:2015/09/12(土) 20:33:48.01 ID:fRaBt1iw
>>340
で、そのコードは何をしたいのよ?
わけがわからないんだが。
なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
342 :デフォルトの名無しさん[]:2015/09/12(土) 21:44:54.94 ID:fRaBt1iw
>>339
へい。
http://ideone.com/0nYclV
なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
344 :デフォルトの名無しさん[]:2015/09/12(土) 22:22:33.58 ID:fRaBt1iw
>>343
やめろ、長文を書かれて俺はいまパニクっている。
まずその点についてお前は俺のことを心配して気づかうべきだし、
やさしい気持ちでこの後の文章に目を通して欲しい。

再帰を使うと変数のスコープがわかりにくくなることが
あるよっていうのをわかりやすく示そうとしてouter、innerと
いう変数名を使用した。ロジックは全部で5行程度だし、何をやっているのかは
すぐにわかると思ったからそれで問題ないと踏んだ。

こういう事情があったんだ。同情するだろ?じゃあ同情してどうぞ。
今後ともよろしくお願いいたします。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。