Return to Video

22-17 Recursive Vs Iterative

  • 0:01 - 0:04
    どんな関数でも再帰的に書くことができます
  • 0:04 - 0:07
    再帰的定義を使用せず書いていきましょう
  • 0:07 - 0:11
    私たちが定義したものが回文であることを
    他の方法で示したいと思います
  • 0:11 - 0:13
    そのためここではforループを使います
  • 0:13 - 0:15
    ループで使うのは変数iと
  • 0:15 - 0:20
    ゼロからsの要素数を2で割った値までの範囲です
  • 0:20 - 0:22
    sの途中まで行います
  • 0:22 - 0:25
    ループの中ではifテストが行われ
  • 0:25 - 0:32
    iの位置にある文字が-(i + 1)の位置と
    異なっているかを確認します
  • 0:32 - 0:36
    文字列の後ろiの位置から数えます
  • 0:36 - 0:40
    異なる場合は間違いを見つけたわけであり
    Falseを返します
  • 0:40 - 0:43
    等しければループを続けます
  • 0:43 - 0:44
    違いが見つからずループの最後まで行けば
  • 0:44 - 0:48
    それは回文でありTrueを返します
  • 0:48 - 0:52
    これが定義したものが回文かを確かめる
    もう1つの方法です
  • 0:52 - 0:54
    これは複雑であり
    正しく理解するには難しいと思います
  • 0:54 - 0:58
    このコードが正しく機能するまでに
    私は3回試しました
  • 0:58 - 1:02
    それに対し再帰的定義では1回で正しく行えました
  • 1:02 - 1:05
    でも再帰的定義を使用しないコードは
  • 1:05 - 1:08
    それを使用するコードに比べ
    非常に長い回文をテストしたい場合に効率的です
  • 1:08 - 1:10
    それにはいくつか理由があります
  • 1:10 - 1:14
    1つは再帰的定義は新しい文字列を
    作り続けてしまうことです
  • 1:14 - 1:19
    再帰呼び出しを行う度に新しい文字列を作る
    必要がありメモリを大量に消費します
  • 1:19 - 1:22
    2つ目の理由は再帰呼び出し自体が
    メモリを消費することです
  • 1:22 - 1:24
    再帰呼び出しのメモリ消費を抑える言語もありますが
  • 1:24 - 1:27
    Pythonはそういった言語ではありません
  • 1:27 - 1:31
    Pythonで再帰呼び出しを行うと
    大量にメモリを消費します
  • 1:31 - 1:34
    ほとんどの関数において再帰呼び出しは
  • 1:34 - 1:37
    正解を導く簡潔な方法です
  • 1:37 - 1:39
    パフォーマンスの面で不安を抱く場合や
  • 1:39 - 1:42
    大量の入力で機能する関数が必要な場合は
  • 1:42 - 1:46
    非再帰的な方法で関数を定義する方がいいでしょう
タイトル:
22-17 Recursive Vs Iterative
概説:

22-17 Recursive Vs Iterative

more » « less
Video Language:
English
Team:
Udacity
プロジェクト:
CS101 - Intro to Computer Science
Duration:
01:47

Japanese subtitles

改訂