見出し画像

【Python】要注意!止まる条件は書きましたか?「再帰関数」

こんにちは!シェルソートのお話がやっと終わって、エネルギーを使い果たしたため、今回はまた小休止的な記事を書きたいと思います。

今回のテーマは、「再帰関数」です。再帰関数とは、関数の中でその関数を呼び出す関数です。

「いま、一文の中に『関数』が4回でてきましたよ~😑。頭がぐるん、ぐるんです…。」

いや、皆さまの頭がぐるぐるんするのではなく、「関数」がグるんぐるんするんです…🙂。なお、この「再帰関数」のお話しは、後日紹介する「クイックソート」の伏線となっております。ちゃんと後でお話がつながるのです!

ではでは、どんな関数か早速見てみましょう!

例1:カウントダウンする関数を作ってみた

再帰関数の例一つ目は、カウントダウンをする関数countdownです!コードは次のとおりです。nを引数として渡すと、n、n-1…2、1までの整数が出力されます。

今回は、引数を5として関数を実行したので、5,4,3,2,1と順番に出力されました。ポイントとなるのは、次の赤枠の行です。

countdownという関数の中に、countdownが入っています。この処理に到達すると再び上から実行されるわけですね。ただし、引数が異なることにご注目ください。実行の都度、引数は1小さくなります。そして、nが0より小さくなったら停止します。うん、ループみたいですね。

注意!停止する条件がなければ、処理が止まらない

ということは、停止する条件(上の例ではif文)を書き忘れるとどうなりますか?はい、無限ループが生じます。すでに私は、このサンプルコードを書いているときに無限ループをしでかしました😭。Jupyter Notebookさん(Pythonの実行環境)が気を利かせて止めてくれましたけれども…。お気をつけくださいませ。

例2:バイバイする関数

さてあともう一つご紹介します。バイバイする関数です。

「はい、さようなら🙂」

いやそうじゃないです💦。倍倍する関数でございます…。関数multipleを作り、その中にmultipleの処理を入れました。引数がどんどん2倍になっていきます。

最初は1ですが、次は2、その次は4と倍倍になりますね。無限に増えては困るので引数が30を超えないように設定しました。こんなものも作れるんですね。

ところで、この話どこかで聞いたとありません?「1日目に米を一粒ください。次の日は、その倍の数の米をください。それを30日間続けてください」とか、新聞紙を折りたたみ続けるとどれくらいの高さになるでしょうか?」とかね。

ちなみに10000粒に達するのはどれくらいなんでしょうね。次の通りです。15日目みたいですね…。30日後は、いくらになることやら。

ということで、再帰関数でした。自分で何か再帰関数を定義してみるのが一番学びになりますね。

おっと、本日のコードです。

def countdown(n):
    if n > 0:
        print(n)
        countdown(n-1)

countdown(5)
def multiple(n):
    if n < 30:
        print(n)
        multiple(n*2)

multiple(1)

では、ビーダゼーン!

※私のやる気アップとブログの品質向上につながりますので、記事が気に入られた方は、「ポチっ」と好きボタンを押してくださったり、フォローいただけますと幸いです🙇。

この記事が気に入ったらサポートをしてみませんか?