Ich habe immer noch Probleme mit der grundlegenden Rekursion. So habe ich zwei Funktion gezeigt alsKonvertieren in eine rekursive Funktion?
unsigned long factorial(int x)
{
// recursive function to find factorial
if(x==1)
return 1; // base case
return x * (factorial(x-1)); // recursive call
}
int choose(int choose, int choose_from)
{
// function to find how many different ways to "choose"
// calls factorial function multiple times
return factorial(choose_from)/(factorial(choose) * factorial(choose_from - choose));
}
Mein Lehrer sagte mir, das ist eigentlich falsch ist, und ich sollte in der Auswahl-Funktion werden Rekursion. Ich sehe nicht, wie seit der Wahl Formel als C (n, r) = n gegeben ist!/(r! · (n - r)!), und da alles, was rekursiv ist, die Faktoren ist, habe ich nur eine separate faktorielle Funktion gemacht.
Wie würden diese beiden Funktionen, ohne neue Bibliotheken zu verwenden, zu einer rekursiven Funktion werden?
Es gibt fast unendlich viele Beziehungen zwischen Binomen. Wählen Sie eine, die geeignet rekursiv erscheint. Benutze es. –
Nun, Sie müssen nicht die vollständigen Faktoren berechnen, wie Sie es jetzt tun, um C (n, r) zu berechnen. Schreiben Sie die Formel auf Papier und löschen Sie die Werte - Sie sollten mit nur ein paar Multiplikationen verlassen werden. Zum Beispiel 'C (52, 51)' - Sie müssen sicherlich nicht 52 berechnen! und 51! um die Antwort zu bekommen. – PaulMcKenzie
Ich denke, ** ein guter Weg, sich dem zu nähern, besteht darin, Pascals Dreieck darzustellen, indem man jede Zahl von der vorherigen auf dieser Linie berechnet, wobei eine feste Anzahl von arithmetischen Operationen pro Zahl verwendet wird. Die Berechnung kann Informationen wie die Platzierung der Nummer in der Zeile verwenden. Ich erinnere mich, dass ich das in der High School gemacht habe (auf einem i8085 Computer), also ist es sehr machbar und lehrreich. Dies gibt Ihnen dann eine Beziehung, die leicht als eine rekursive Formel ausgedrückt werden kann. Und dann in Ihrer 'Choose' Funktion verwendet. –