2017-05-23 18 views
0

なぜwhileループがパスカル三角形を印刷するのに予想以上に実行されていますか? たびにwhileループが実行され、Xは、パイソン あなたはpascal機能に番号を反復処理するために2つのメソッドを使用しているPythonコードの出力結果の理由

memo = {0:1} 
def fac(n): 
    if n not in memo: 
     memo[n] = n*fac(n-1) 
     return memo[n] 
    else: 
     return memo[n] 

def pascal(x, space): 
    while(x <= n): 
     for j in range(space): 
      print(" ", end = "") 
     for i in range(0, x+1): 
      print (int(fac(x)/(fac(i)*fac(x-i))), end = " ") 
     print("\n", end = "") 
     x += 1 
     space -= 1 
     pascal(x, space) 

n = eval(input()) 
space = n 
x = 0 
pascal(x, space) 
+0

どのようなメモはそれと関係がありますか? メモの機能は、階乗を計算し、それぞれを辞書に格納することです。@AzatIbrakov – anonymous

+0

"予想よりも何倍"正確には何ですか? –

+0

@gabrielbelini – anonymous

答えて

0

を助けてください、私はちょうど学び始めた同じ まま1のnに対し、インクリメントされwhileループ、および再帰呼び出しです。あなたはそれらの1つだけを必要とします。

1 
    1 1 
1 2 1 
1 3 3 1 

def pascal(x, space): 
    if(x <= n): 
     for j in range(space): 
      print(" ", end = "") 
     for i in range(0, x+1): 
      print (int(fac(x)/(fac(i)*fac(x-i))), end = " ") 
     print("\n", end = "") 
     x += 1 
     space -= 1 
     pascal(x, space) 

考える3の入力として、両方のバージョンは、次の印刷:whileifに回し、再帰呼び出しを維持

def pascal(x, space): 
    while(x <= n): 
     for j in range(space): 
      print(" ", end = "") 
     for i in range(0, x+1): 
      print (int(fac(x)/(fac(i)*fac(x-i))), end = " ") 
     print("\n", end = "") 
     x += 1 
     space -= 1 

whileループを維持します

+0

ありがとう@legoscia – anonymous

関連する問題