再帰呼び出し


📌 再帰呼び出し

  • 再帰的使用法:関数で同じ関数を呼び出す形式
  • 厳密に言えば、再帰的な使い方自体はアルゴリズムではありませんが、後で高度なアルゴリズムを処理する際に使うので、熟知しておきましょう~

    📌 再帰呼び出しの一般的な形式


    💡 形態。

    def function(입력):
        if 입력 > 일정값: 			# 입력이 일정 값 이상이면
            return function(입력 - 1) 	# 입력보다 작은 값
        else:
            return 특정값 			# 재귀 호출 종료

    💡 形態2(形態1では少し順序を変える)

    def function(입력):
        if 입력 <= 일정값:             	 # 입력이 일정 값보다 작으면
            return 특정값             	 # 재귀 호출 종료
        function(입력보다 작은 값)
        return 결과값

    📌 再帰呼び出しの例として理解


    n!:1×2×...×nn!:1×2×...×nn!:1×2×...×n:再帰呼び出しによるファクトリ関数の実装

    1回""形状を実装

    def factorial(num):
        if num > 1:
            return num * factorial(num - 1)
        else:
            return num

    2回""形状を実装

    def factorial(num):
        if num <= 1:
            return num
        return_value = num * factorial(num - 1)
        return return_value
    

    📌 再帰呼び出しとスタック

  • 再帰呼び出しは、スタック(stack:LIFO方式のデータ構造)の典型的な例である.
  • 再帰関数は、内部でスタックのように管理されます.

  • 📌 複数の再帰的な使い方を使う


    1)1からnumまでの積を出力する再帰関数。

    def multiple(num):
        if num <= 1:
            return num
        return num * multiple(num - 1)

    2)数値を含むリストの和を返す再帰関数

    data = [1, 3, 5, 2, 6, 7]
    
    def sum_list(data):
        if len(data) <= 1:
            return data[0]
        return data[0] + sum_list(data[1:])

    3)回文(回文)を判別する関数


    回文
    def palindrome(string):
        if len(string) <= 1:
            return True
        
        if string[0] == string[-1]:
            return palindrome(string[1:-1])
        else:
            return False

    4)1,2,3の組み合わせだけで整数nを作成できる場合に返される関数。


    f(n)がf(n-1)+f(n-2)+f(n-3)に等しいモードを見つけろ!
    def func(data):
        if data == 1:
            return 1
        elif data == 2:
            return 2
        elif data == 3:
            return 4
       
        return func(data -1) + func(data - 2) + func(data - 3)