ホームページ  >  記事  >  バックエンド開発  >  Python 再帰関数の定義と使用法の分析例

Python 再帰関数の定義と使用法の分析例

黄舟
黄舟オリジナル
2017-06-04 10:12:411603ブラウズ

この記事では、主にPython再帰関数の定義と使用法を紹介し、原理、実装テクニック、および関連するPython再帰関数を具体的な例の形で分析しますメモ、必要な友人はそれを参照できます

この記事の例 Python 再帰関数の定義と使用法を学びます。参考のために皆さんと共有してください。詳細は次のとおりです:

再帰関数

関数内で、他の関数を呼び出すことができます。関数がそれ自体を内部的に呼び出す場合、関数は再帰的です。

たとえば、fact(n) という関数で表される階乗 n! = 1 * 2 * 3 * ... * n を計算してみましょう:

fact(n) = n! * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fat(n-1) * n

したがって、fact(n) は n * fat と表すことができます。 (n -1)、n=1 のみ特別な処理が必要です。
それで、再帰的に書かれたfact(n)は次のようになります:

def fact(n):
if n==1:
  return 1
return n * fact(n - 1)

上記は再帰関数です。試してみてください:

>>> fact(1)
1
>>> fact(5)
120
>>> fact(100)
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000L

fat(5) を計算すると、関数定義に従って次のように計算プロセスがわかります:

===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120

再帰関数の利点は、定義が単純でロジックが明確であることです。理論的には、すべての再帰関数は loop として記述できますが、ループのロジックは再帰ほど明確ではありません。

再帰関数を使用するときはスタックオーバーフローを防ぐように注意してください。コンピュータでは、関数呼び出しはスタックのデータ構造を通じて実装され、関数呼び出しが開始されるたびにスタック フレームがスタックに追加され、関数が返されるたびにスタック フレームがスタックから減算されます。スタックのサイズは無限ではないため、再帰呼び出しが多すぎるとスタック オーバーフローが発生します。ファクト(10000)を計算してみてください。

りー

以上がPython 再帰関数の定義と使用法の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。