関数の再帰処理(再帰呼び出し)

関数の再帰呼び出し
  • 定義した関数はその関数自身の内部で呼び出すことができます。これを再帰処理(再帰呼び出し)と言います。

定義した関数を関数の内部で呼び出してみる 

func sum(n:Int) ->Int{
    if n > 1{
        return n + sum(n: n - 1)
    }else{
    return 1
}
print(sum(n:3))

      
  • 関数sumを定義します。引数はnでInt型で返します。
  • 条件はn>1の時に実行されます。そうでないときelse以降が実行されます。
  • sumの値は3と設定しました。
  • 3の値はn>1だとtrueのためここで条件が実行されます。このときはn(3の値のこと) + sum(n(ここは引数nを指す):n-1(ここは3の値が代入され3-1を指す))つまり3+sum(n:3-1)になります。
  • 再帰処理は続きます。sum(n:3-1)という値はn>1だとtrueのため、条件が実行されます。nの値はさきほど3-1で2になったため2+sum(n:2-1)になります。
  • 2+sum(n:2-1)でnは1になりました。条件を抜けてelse以降が実行され終了します。
  • これを遡ると3+sum(n:3-1)は3+2+1を指していることになります。
  • print(sum(n:3))で6が表示されます。
注目

つまり関数sumの内部では1からnまでの和を返す、という処理が行われています。

func sum(n:Int) ->Int{
    if n > 1{
        return n + sum(n:n-1)
    }else{
    return 1
}
print(sum(n:10))

      
  • 関数sumの値を10に設定しました。
  • これは1+2+3+4+5+6+7+8+9+10が実行され55になります。
func rep(n:Int) -> String{
    if n <= 1{
        return "Hello"
    }else{
        return "Hello" +rep(n: n - 1)
    }
}
print(rep(n:3))
        
  • 関数repを定義します。
  • nが1以下のときに条件が実行されます。戻り値”Hello”です。
  • そうでないときにelse以降が実行されます。”Hello”+rep(n:n-1) (repの再帰処理)
  • nの値は3としたためelse以降の処理が実行されます。
  • “Hello”+rep(n:3-1)→再帰処理→”Hello”+rep(n:2-1)→nの値は1になりました。
  • ここでn<=1の条件が発動し、値の1は”Hello”になりました。つまり”Hello”+”Hello”+”Hello”という意味になります。
  • print(rep(n:3))で”Hello”が3回表示されます。