Sie schrieben tatsächlich sequence(n-2)+sequence(n-3)
statt sequence(n-2)-sequence(n-3)
(man beachte das +
Zeichen statt -
)
Wenn Sie sehen, Sie müssen nicht wirklich sequence(n - 2)
aufrufen, da -sequence(n - 2)
und +sequence(n - 2)
ausschneiden und den Ausdruck nur sequence(n-1) + sequence(n-1) - sequence(n-3)
verlassen
Und Sie rekursiv mit n - 1
mehr als einmal aufrufen, können Sie einige Laufzeit speichern, rufen Sie es nur einmal und speichern Sie das Ergebnis in einer Variablen und verwenden Sie es zweimal.
int sequence(int n)
{
if(n<=2)
return n;
else if(n==3)
return 5;
int nMinus1 = sequence(n - 1);
int nMinus3 = sequence(n - 3);
return nMinus1 + nMinus1 - nMinus3;
}
Sehen Sie diese Implementierung live here.
Aber ich würde wirklich empfehlen, dynamische Programmierung zu verwenden, um vorherige Ergebnisse zu speichern und sie zu verwenden, da es die Laufzeit drastisch reduzieren wird. Aber wenn Sie Rekursion verwenden müssen und nicht einfach iterieren können, um die Sequenz zu berechnen, können Sie sicher so etwas tun.
class SequenceGenerator{
private:
static std::vector<int> results;
public:
static int getNthInSequence(int n){
if (results.size() == 0){
results.push_back(0); // just to ignore the 0 index
results.push_back(1);
results.push_back(2);
results.push_back(5);
}
if (n < results.size())
return results.at(n);
int nMinus1 = getNthInSequence(n - 1);
int nMinus3 = getNthInSequence(n - 3);
int result = nMinus1 + nMinus1 - nMinus3;
results.push_back(result);
return result;
}
};
std::vector<int> SequenceGenerator::results;
Here is a live demo.
Haben Sie diese Funktion erwarten eine Liste von Zahlen zurückzukehren, oder eine einzelne Zahl? "Sequenz" ist mehrdeutig und ich sehe nirgendwo die Einführung von Listen. – Carcigenicate
Die Reihenfolge der Auswertung ist hier nicht genau angegeben: 'Sequenz (n-1) + ((Sequenz (n-1) -Sequenz (n-2)) + ((Sequenz (n-2) + Sequenz (n- 3)))); ' –
Diese Rekursion, die Sie beschreiben und implementieren, ist sehr schwer. In der Tat brauchen Sie nur die 3 vorherigen Zahlen ... also behalten Sie 3 Variablen und drehen Sie die Werte dort. Wenn Sie mit der Fibonacci-Sequenz vertraut sind, können Sie ein Beispiel dessen sehen, was ich hier sage: http://www.programmingsimplified.com/cpp/source-code/fibonacci-series –