我在PHP中處理歐拉問題。我至今這個功能:如何將原始參數保存在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);
?>
我大多舔問題,但我似乎無法得到回到了原來的輸入。問題是「當你有一個數字時,如果奇數得到3n + 1,當偶數時,得到n/2,直到返回1.在你找到一個之前,什麼起始值產生最」步驟「?我現在正在返回步驟數,但是當我遞歸時,我一直在重置$ i,所以我無法記錄#開始的最大步數。
我該如何跟蹤這個數字,但是在下一個循環中沒有銷燬它? (我最終將其包裝在一個for($ i = 1,$ i < 1000000,$ i ++)循環中)
謝謝!
功能上的靜態並不比全局變量好,真的。 – jason 2009-08-14 05:43:08