1. 再帰とは
関数にそれ自体への呼び出しが含まれる場合、その関数は再帰的です。再帰はアルゴリズムとしてプログラミング言語で広く使用されており、通常、大規模で複雑な問題を元の問題と同様の小さな問題に変換します。再帰戦略は、複数の反復計算のみで記述できます。問題を解決するために必要なコード量が大幅に削減されます。たとえば、1 ~ 9 の 9 桁の数値の積を計算する場合、1 ~ 10000 の積を計算する場合の直感的なアルゴリズムは 1*2*3*4*5*6*7*8*9 です。 、直感的なアルゴリズムの実装は難しいですが、再帰は簡単に実装できます。例を見てください:
def fact(n):#计算给定数字到一的乘积 if n<=1: return 1 else: return n * fact(n-1) print (fact(7))
結果は次のとおりです: 5040
再帰的な実行プロセスを確認するために例を使用してみましょう:
def calc(n): print(n) if n/2 > 1: res = calc(n/2) return n calc(8)
結果は次のとおりです:
えー この例をもう一度見てください:8 4.0 2.0
def calc(n): print(n) if n/2 > 1: res = calc(n/2) print('res:',res) print("N:",n) return n calc(8)
2. ジェネレーター ジェネレーターは収量のある関数です声明 。関数またはサブルーチンは 1 回しか戻りませんが、ジェネレーターは実行を一時停止して中間結果を返したり、呼び出し元に値を返して実行を一時停止したりできます。ジェネレーターの next() メソッドが呼び出されると、中断したところから正確に続行されます
以下の例を見てください:
8 4.0 2.0 N: 2.0 res: 2.0 N: 4.0 res: 4.0 N: 8
def func(): print('11111111') yield [1] print(2222222222) yield 2 print(3333333333) yield 3 ret=func() r1=ret.__next__() print(r1) r2=ret.__next__() print(r2) r3=ret.__next__() print(r3)
Python のループには next() 呼び出しと StopIteration の処理があり、ジェネレーター (またはそのイテレーター) を手動で反復処理する代わりに、for ループを使用するほうがずっとクリーンで見栄えがよくなります。例:
11111111 [1] 2222222222 2 3333333333 3
これらの簡単な例は、ジェネレーターがどのように機能するかを少し理解できるはずです。次に生成された値を取得する next() に加えて、ユーザーはジェネレーターに値を送り返したり [send()]、ジェネレーターで例外をスローしたり、ジェネレーターに終了を要求したりすることができます [close()]
はこちらデモンストレーション これらの機能の簡単な例。
def func(): print('11111111') yield [1] print(2222222222) yield 2 print(3333333333) yield 3 ret=func() for i in ret: print(i)
ジェネレーターには、ジェネレーター [next()] を呼び出すたびに 1 ずつカウントアップする初期化された値が付属しています。本当に next() を呼び出す代わりに新しい値で send() を呼び出したい場合、ユーザーにはこの値をリセットするオプションがあります。このジェネレーターは永久に実行されるため、終了したい場合は close() メソッドを呼び出します。このコードを対話的に実行すると、次の出力が得られます:
def counter(start_at=0): count = start_at while True: val = (yield count) if val is not None: count = val else: count += 1
Python 関数の再帰とジェネレーターの詳細な理解に関する上記の記事は、エディターによって共有されたすべての内容です。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。
Python 関数の再帰とジェネレーターに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。