[解決済み] 歩留まりを利用した再帰性
2023-02-17 21:49:07
質問
再帰処理と
yield
ステートメントを混ぜる方法はありますか?例えば、無限数生成器(再帰を使用)は、次のようなものです。
def infinity(start):
yield start
# recursion here ...
>>> it = infinity(1)
>>> next(it)
1
>>> next(it)
2
試してみました。
def infinity(start):
yield start
infinity(start + 1)
と
def infinity(start):
yield start
yield infinity(start + 1)
しかし、どれも私が望むようなことはしてくれず、最初のものは
start
を出力した後に停止し、2つ目の出力は
start
と表示され、次にジェネレータが表示され、そして停止しました。
注意 お願いします、while-loopを使ってできることは知っています。
def infinity(start):
while True:
yield start
start += 1
これが再帰的にできるのかどうか知りたいのです。
どのように解決するのですか?
はい、できます。
def infinity(start):
yield start
for x in infinity(start + 1):
yield x
ただし、これは再帰深度が最大になるとエラーになります。
Python 3.3以降では、この問題を解決するために
def infinity(start):
yield start
yield from infinity(start + 1)
もし、ジェネレータ関数をループさせずに再帰的に呼び出すだけなら、あるいは
yield from
-を使用せずに再帰的に呼び出す場合、実際に関数本体を実行したり、何かを生成することなく、新しいジェネレータを構築するだけになります。
参照 PEP 380 を参照してください。
関連
-
[解決済み] C#で「yield break;」は何をするのか?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] Pythonにはクラス内に「プライベート」変数がある?
-
[解決済み] Python 3.3のyield from構文は、実際にはどのような用途に使われるのでしょうか。
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】C#のyieldキーワードは何に使われるのか?
-
[解決済み】yield returnを使ったIEnumerableとRecursionについて
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?