[解決済み] テールリカーシオンフィボナッチ
2022-02-06 17:32:33
質問
ループのない再帰的なフィボナッチ関数を O(n) で実行するにはどうしたらいいですか?
どのように解決するのですか?
通常、私はこのような宿題の答えを掲載することに反対なのですが、これまでに掲載されたものは、物事を複雑にしすぎているようです。上のコメントで言われているように、反復して行うように再帰を使って問題を解けばいいのです。
これがその反復解法だ。
def fib(n):
a, b = 0, 1
while n > 0:
a, b = b, a+b
n -= 1
return a
以下は、同等の再帰的な解決策です。
def fib(n):
def fib_help(a, b, n):
return fib_help(b, a+b, n-1) if n > 0 else a
return fib_help(0, 1, n)
どちらの場合も、実際にはFまでしか計算していないことに注意してください。 <サブ n+1 を返しますが、F n を結果とします。これは、あなたが与えられた"ヒント"とうまく一致します。
じっくりと2つの解答を見比べて、同等であることを納得してほしい。反復解を同等の再帰解に変換する(またはその逆)方法を理解することは、良いスキルです。
関連
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み】フィボナッチ数列の計算複雑性
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
opencvとpillowを用いた顔認証システム(デモあり)
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
Python入門 openを使ったファイルの読み書きの方法
-
Python 入出力と高次代入の基礎知識
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】NameError: 名前 'self' が定義されていません。