Ich bin in PHP arbeiten an einem Euler-Problem. Ich habe diese Funktion so weit:Wie speichere ich das ursprüngliche Argument in einer rekursiven Funktion in PHP?
<?php
$biggest = 0;
$counter = 1;
function test($i){
global $biggest;
global $counter;
if ($i == 1) {
echo "I'm done! Took me $biggest steps";
}
else {
if ($i%2 == 0) {
$counter = $counter + 1;
if ($counter>$biggest) {
$biggest = $counter;
}
test($i/2);
}
else {
$counter = $counter + 1;
if ($counter>$biggest) {
$biggest = $counter;
}
test(3*$i+1);
}
}
}
test(13);
?>
ich das Problem meist geleckt haben, aber ich kann nicht zurück auf den ursprünglichen Eingang zu bekommen scheinen. Die Frage ist: "Wenn Sie eine Zahl haben, wenn ungerade 3n + 1 erhalten, wenn gerade, erhalten n/2, tun, bis 1 zurückgibt. Welcher Startwert ergibt die meisten" Schritte ", bevor Sie zu einem kommen?" Ich gebe derzeit die Anzahl der Schritte zurück, aber ich setze immer $ i zurück, während ich rekursiere, also kann ich nicht aufzeichnen, welche startende # meine größte Anzahl an Schritten hervorgebracht hat.
Wie kann ich diese Nummer behalten, aber nicht bei der nächsten Instanz der Schleife zerstören? (Ich werde schließlich dies in eine Schleife für ($ i = 1, $ i < 1000000, $ i ++) wickeln)
Vielen Dank!
Statik in Funktionen sind nicht besser als Globals, wirklich. – jason