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