2017-07-09 2 views
-5

Also habe ich schon seit einiger Zeit eine Pascal Triangle Codierung programmiert.Python, rekursion multiple Funktionen int one, Pascals Dreieck

In dem geben Sie zwei Zahlen n und k, und Sie erhalten den Wert der Zahl in Ihrer Pyramide.

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) 

Es funktioniert, funktioniert gut, aber die Frage, wie kann ich dies alles paraphrasieren Tuenshaften in dieser Funktion:

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 

Antwort

0

Sie können lokale Funktionen verwenden, die Funktionen in Funktionen sind. Mit denen, wird Ihr Programm etwas wie folgt aus:

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 

Es gibt einige ziemlich Dinge in Ihrem Code zu verbessern, einen Kommentar unten, wenn Sie wollen, dass ich diejenigen erklären ...

EDIT

Seit Ihr Programm berechnet tatsächlich den Binomialkoeffizienten n und k, Ihr Programm könnte wie folgt vereinfacht werden:

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))