[解決済み] Python再帰的パスカルトライアングル
2022-02-19 18:47:06
質問
反復関数を使ってパスカルの三角形を作る課題を終えた後、再帰関数を使って三角形を作り直そうとしました。引数として渡された数字に対応する個々の行を作成するところまではできました。しかし、その行を含む三角形全体を生成させようと何度か試みたのですが、失敗しました。さらに、入力された数値の範囲を反復処理し、反復処理された数値で再帰関数を呼び出し、個々の行をリストに追加してからそのリストを返すという別の関数も書いてみましたが、これも失敗しました。望ましい出力は、各内部リストが三角形の1行を含むリストのリストであるべきです。このように。
[[1], [1, 1], [1, 2, 1]...]
その代わりに、完全に1で埋め尽くされたネストされたリストのごちゃごちゃしたものが返されます。
行を追加する2番目の関数を除いた、問題の再帰的関数は次のとおりです(私はとにかく、すべてを含む1つの関数が欲しかったのです)。
def triangle(n):
if n == 0:
return []
elif n == 1:
return [1]
else:
new_row = [1]
last_row = triangle(n-1)
for i in range(len(last_row)-1):
new_row.append(last_row[i] + last_row[i+1])
new_row += [1]
return new_row
はっきり言って、私はすでに与えられた課題をクリアしています。これは再帰についてより深く理解するためだけのものです...。
反復解法。
def triangle(n):
result = []
for row in range(n):
newrow = [1]
for col in range(1, row+1):
newcell = newrow[col-1] * float(row+1-col)/col
newrow.append(int(newcell))
result.append(newrow)
return result
解決方法は?
リストのリストを再帰的に渡して、リストの最後の要素(つまり三角形の最後の行)を選んで、新しい行を作るだけでいい。 こんな風にね。
def triangle(n):
if n == 0:
return []
elif n == 1:
return [[1]]
else:
new_row = [1]
result = triangle(n-1)
last_row = result[-1]
for i in range(len(last_row)-1):
new_row.append(last_row[i] + last_row[i+1])
new_row += [1]
result.append(new_row)
return result
関連
-
PicgoのイメージベッドツールをPythonで実装する
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
Python カメの描画コマンドとその例
-
python implement mysql add delete check change サンプルコード
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac