Hallo Tobi,
bevor man sowas codiert, sollte man sich das Produkt genauer anschauen$$\phantom{=} \prod \limits_{i=1}^{n} \frac{3 i+3}{2 i}\\ = \prod \limits_{i=1}^{n} \left(\frac{3}{2}\cdot \frac{i+1}{i}\right)\\ = \left(\frac{3}{2}\right)^n\cdot\prod \limits_{i=1}^{n} \left(\frac{i+1}{i}\right)\\ = \left(\frac{3}{2}\right)^n\cdot\left(\frac{2}{1}\cdot \frac{3}{2}\cdot \frac{4}{3}\cdot\,\dots \cdot \frac{n}{n-1}\cdot \frac{n+1}{n}\right)\\ = \left(\frac{3}{2}\right)^n(n+1)$$leider kann man eine Gleichung wie$$\left(\frac{3}{2}\right)^n(n+1)= x$$nicht ohne weiteres nach \(n\) auflösen. Aber trotzdem vereinfacht sich der Algorithmus:
function calc_n(x)
begin
let n = 0
let q = 1
while not(x < q * (n + 1)) do
begin
n = n + 1
q = q * 1.5
end
return n
end
der Algorithmus macht pro Schritt nur noch zwei Multiplikationen statt drei plus einer Division, wenn man es 'klassisch' lösen würde. Außerdem hat er eine Komplexität von \(O(n)\) statt \(O(n^2)\) wie z.B. der von döschwo ;-)
Gruß Werner