2017-07-11 16 views
-1

パスカルの三角形を作ることができません。私は再帰で要素をリストするために追加する必要がありますが、私の仕事の結果はリストに追加されたリストです。私はそれをやるのを手助けすることができますか? 私のテストコードは次のとおりです。私はそれを使用する場合は再帰でリストを追加

def list(row): 
    if(row is 0): 
     return 0 
    return [row, list(row-1)] 

、私は、リスト内のリストを返します。私は、リスト内の要素を必要とする

print(list(10)) 

出力:

[10, [9, [8, [7, [6, [5, [4, [3, [2, [1, 0]]]]]]]]]] 

予想される出力:

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 
+0

与えられた方法を使用してパスカルの三角形を作成することができます。 –

+1

'list'はPythonの予約語です。あなたの関数には別の名前を使用してください。 – depperm

+0

入力と期待される出力を提供してください。 – Szabolcs

答えて

3

は、ここにあなたがそれを

def foo (row): 
    if row == 0: 
    return [0] 
    else: 
    return [row] + foo (row - 1) 

print(foo(10)) 
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

を書くことができ一つの方法は、おそらく、パスカルの三角形について

print([10 - x for x in range (0, 11)]) 
# [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

だろう書き込みのより「神託」の方法は、ここに一つの方法あなたはだです補助ヘルパーと連続渡しスタイルを使用してプログラムを書くことができます。疑問に思う人には、結果が直接的に組み立てられるように選択しました再帰呼び出しはこの機能を意味末尾位置は、簡単に必要に応じて

def sliding (n,xs): 
    if n > len(xs): 
    return [] 
    else: 
    return [xs[0:n]] + sliding(n, xs[1:]) 

def pascal (n): 
    def aux (m, prev, k): 
    if n == m: 
     return k([prev]) 
    else: 
     return aux(m + 1, [1] + [x + y for (x,y) in sliding(2, prev)] + [1], lambda rest: k([prev] + rest)) 
    return aux(1, [1], lambda x: x) 

for line in pascal(5): 
    print(line) 
# [1] 
# [1, 1] 
# [1, 2, 1] 
# [1, 3, 3, 1] 
# [1, 4, 6, 4, 1] 
1

それはあなたがリストを呼び出した結果として返さリスト[x]を連結するように聞こえますlist(x-1)。 Pythonのリストの良い点は、+オペレータがまさにこれを行うことです。最終返品明細書をreturn [x] + list(x-1)に変更すると、正しい方向に向かっています。整数にリストを追加することができないので、xが0のときに問題に遭遇することに気付くでしょう。したがって、基底ケースをreturn [0]に変更したいと思うでしょう。述べたように最後に、それはそうのはmy_listにあなたの関数の名前を変更してみましょう、組み込み関数のpythonを(listが1である)を上書き名を宣言避けるのがベストです:

def my_list(row): 
    if row == 0: 
     return [0] 
    return [row] + my_list(row-1) 

これは非常にあなたがのに三角形をパスカル得ることはありませんが、うまくいけば、あなたは正しいコースにいます。何をしたい

+0

ありがとうございます。この回答も非常に役に立ちます –

1

は、おそらくこれです:

return [row] + list(row-1) 

これは、1つの要素rowでリストを作成し、その上に他のリストを追加します。あなたの特定の機能については

1

スタックセーフにするためにトランポリンの上に置くことができあなたが期待される結果を出力し、再帰的な範囲の機能を作成することができます。

def rec_range(n): 
    return [n] + rec_range(n-1) if n else [0] 
>>> rec_range(10) 
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

はそれを願っています助けてください。

rangexrange、python2)X):

>>> list(range(10+1))[::-1] # reverse the list 
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 
+0

ありがとうございます。非常に役に立ちました –

+0

@NurislomTuraevようこそ! – Szabolcs

0

あなたは再帰を使用する必要があります

def pascal(rows): 
    for i in range (rows): 
    value=1 
    List = [value] 
    for j in range (i): 
     value = value * (i-j) * 1/(j + 1) 
     List.append(int(value)) 
    print(List) 

pascal(5) 
# [1] 
# [1, 1] 
# [1, 2, 1] 
# [1, 3, 3, 1] 
# [1, 4, 6, 4, 1] 
+0

再帰を使用する必要があります。それは仕事です。 –

関連する問題