Das ist weniger eine C+±Frage als eine der Algorithmik, oder?
Wie wäre folgender Algorithmus:
Sei D die darzustellende Zahl, und d der Nachkommaanteil (D = …,d).
Sei z der gesuchte Zaehler, n der gesuchte Nenner. Initialisiere z = 0, n = 1. Sei epsilon der tolerierte Fehler.
Solange d - z/n > epsilon:
wenn d > (2*z+1) / n:
z = 2*z + 1
n = 2*n
sonst:
z = 2*z
n = 2*n
Das Ergebnis ist dann der Ganzzahlanteil GZ von D plus z/n, also (GZ*n + z) / n. Kürzen nicht vergessen.
Das ist jetzt zwar nicht als Rekursion formuliert, aber könnte funktionieren, oder? Man muss noch aufpassen, dass es auch mit negativen Zahlen funktioniert etc. Ich hab’s jetzt allerdings nicht ausprobiert bzw. auch nicht die Korrektheit bewiesen…
War das dein Hauptproblem, oder auch, wie man es in C++ hinschreibt?
Viele Grüße,
Sebastian
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]