Python を使用してヤン・ホイの三角形の例を出力する

WBOY
リリース: 2016-06-16 08:43:46
オリジナル
2534 人が閲覧しました

Yang Hui Triangle について詳しくは、右折して Wikipedia:Yang Hui Triangle を参照してください

より直感的な図を見てください:

コードをコピーします コードは次のとおりです:

1
1 1
🎜>1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1



ヤン・ホイの三角形には次の特徴があります:
各項目の値は、左上隅の数字と右上隅の数字の合計に等しくなります。左上隅または右上隅に数字がない場合は、0として計算されます。 。 レイヤー N のアイテムの数は常にレイヤー N-1 のアイテムの数より 1 多くなります


N 番目の層の楊輝三角形を計算するには、N-1 層の番号を知っている必要があり、次に 2 つの隣接する項目の番号を加算して、次の層の 2 つの 1 を除くすべての番号を取得する必要があります。端。 これは少し再帰的なアイデアのように聞こえますが、N-1 層の数値がすでにわかっていると仮定して、N 層の数値を計算することもできます。


コードをコピーします

コードは次のとおりです:

def _yanghui_trangle(n, result): if n == 1: Return [1] それ以外の場合: Return [Sum (i) for I in Zip ([0] + Result, Result + [0])]


上記のコード code では、 result はレイヤー N-1 の Yang Hui 三角形の数を表します。実際には、リストの両端に 0 を追加し、隣接する項目の合計を計算して結果を直接取得します。

コードを少し改善します:


コードをコピーします

コードは次のとおりです:

def yanghui_trangle(n): def _yanghui_trangle(n, result): n == 1 の場合: return [1] else:
return [sum(i) for i in zip([0] + result, result + [0])]
pre_result = []
for i in xrange(n):
pre_result = _yanghui_trangle(i + 1, pre_result)
yield pre_result

if __name__ == "__main__":
for line in yanghui_trangle1(5):
print line

_yanghui_trangle は lambda で省略できますが、可読性が悪くなりますので、その方が良いです。現状を維持すること。

ヒント: 上記のプログラムではデータの書式設定の問題が考慮されていません。つまり、出力は完全な三角形ではありません。

最近 Erlang を学習しているので、パフォーマンスはテストされていませんが、関数型言語の表現力には驚かされます。


コードをコピーします

コードは次のとおりです:

-module(yanghui).-author(lfyzjck).-export([triangle/1]) . triangle_next(P) ->
リスト:zipwith(fun(X, Y) -> X+Y end, [0|P], P ++ [0]).

三角形(1) ->
[[1]];三角形(N) ->

L = 三角形(N - 1),
[H|_] = L,

[triangle_next(H)|L].



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート