我在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