【Python】再帰関数とは何か?注意点と実際の使い方|多次元配列のデータを1次元で抜き出す方法

Python-prograshi(プロぐらし)-kv Python
記事内に広告が含まれていることがあります。

再帰関数とは

関数の中で、自分自身(関数)を呼び出すこと
 └「再帰」の文字通り、自分自身に再び帰る。


再帰関数の注意点

  • 終了条件が必要。
    • ないと無限ループになってしまう
  • デフォルトの上限は1000回まで。


再起関数を使った処理の例

再起関数を使うと、指定した整数までの総和を求めるプログラムを作成することができます。

def sum(n):
    #終了条件
    if n <= 0:
        return n

    #自分自身を呼び出す(再帰関数)
    return n + sum(n-1)


n=4なら、4,3,2,1の数字を順に足し上げていきます。

sum(4)

#出力
10

処理内容の詳細

0以上の整数を入れた場合、

(1) 最初に実行されるのは、n + sum(n-1)
(2) nに数値が入ったあと、sum(n-1)を行う。
    └ 引数が「n-1」になる。
(3) n-1が0より大きい場合、n + sum(n-1)を繰り返す。


多次元配列から整数を取り出す方法

再起関数にif文、for文を組み合わせることで、多次元配列になっているデータを1次元のデータとして取得することができます。

data0 = [1,[2]]

def number(arr):
    #結果を入れるlistを用意
    result=[]

    #整数の場合はresultに追加
    if isinstance(arr, int):
        result.append(arr)

    #list型の場合の処理
    if isinstance(arr, list):
        for brr in arr:
            #再帰関数。実行結果(result)を足していく
            result += number(brr)

    #関数の戻り値
    return result

number(data0)    

#出力
[1, 2]

戻り値(return)を設置する。※場所に注意



▼深さの指定がないため、何次元でも実行可能です。
*デフォルトは上限1,000回まで

data1 = [1,[2],[[3]],[[[[4]]]],[[[[5,6,7],8,9]]],10]

def number(arr):
    result=[]

    if isinstance(arr, int):
        result.append(arr)

    if isinstance(arr, list):
        for brr in arr:
            result += number(brr)

    return result

number(data1) 

#出力
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]       


タイトルとURLをコピーしました