2017-07-09 12 views
-5

私はPascal Triangleコーディングをしながらコードを書いています。Python、rekursion multiple関数int one、Pascals triangle

あなたは2つの数字nとkを与えて、あなたはピラミッドの数字の値を取得します。

n = i = float(input("Geben Sie n Zahl ein: ")) 

k = r = float(input("Geben Sie k Zahl ein: ")) 
ir = i -r 

def zwischenergebnis(ir): 
    if ir ==1: 
     return 1 
    else: 
     ri = ir * zwischenergebnis(ir-1) 
     return ri 

def jo(k): 
    if k == 1: 
     return 1 
    else: 
     ka = k * jo(k-1) 
     return ka 

def factorial(n): 

    if n == 1: 
     return 1 
    else: 
     res = n * factorial(n-1) 

     return res 

b = factorial(n) 



def nenna(ir,k): 
    return zwischenergebnis(ir) * jo(k) 




a = nenna(ir,k) 
b = factorial(n) 
Ergebnis = b/a 
print(Ergebnis) 

それだけで正常に動作しますが、私はこの機能には、このdoingnessの全てを言い換えできるか疑問、作業を行います。

def dynCompNChooseK(n, k): 
    print('Parameter n:') 
    print(n) 
    print('Parameter k:') 
    print(k) 

    Should be implemented hier. 

    result = 10 ## 5 above 3 # 
    return result 

答えて

0

あなたが関数内の関数ですローカル関数を使用することができます。以来

def dynCompNChooseK(n, k): 
    print('Parameter n:') 
    print(n) 
    print('Parameter k:') 
    print(k) 

    def zwischenergebnis(ir): 
     if ir ==1: 
      return 1 
     else: 
      return ir * zwischenergebnis(ir-1) 

    def jo(k): 
     if k == 1: 
      return 1 
     else: 
      return k * jo(k-1) 

    def factorial(n): 
     if n == 1: 
      return 1 
     else: 
      return n * factorial(n-1) 

    def nenna(ir,k): 
     return zwischenergebnis(ir) * jo(k) 

    ir = n - k 
    b = factorial(n) 
    a = nenna(ir,k) 
    b = factorial(n) 
    return b/a 

、あなたのコードで改善あなたは私がそれらを説明したい場合は、以下のコメントをかなりのものがあります...

EDIT

:それらを使用して、あなたのプログラムは、このようなものになりあなたのプログラムは実際にnkと与えられた二項係数を計算するので、あなたのプログラムは次のように単純化することができます:

def dynCompNChooseK(n, k): 
    print('Parameter n:', n) 
    print('Parameter k:', k) 

    def fak(n): 
     """Calculates the factorial n! given the positive integer n""" 
     return 1 if n == 1 else n * fak(n-1) 

    return fak(n)/(fak(k)*fak(n-k))