<?php
$count = 0 ;
$max = 0;
for($n = 2 ; $n < 1000000 ; $n++){
while ($n > 1)
{
if ($n % 2 == 0 )
{
$n = $n/2;
}
else
{
$n = 3*$n + 1 ;
}
$count += 1;
if($count > $max )
{
$max = $count;
$final = $n;
}
}
}
echo $final;
>?
运行花了这么长时间。我看了一些其他解决方案,它们在逻辑上与我的代码非常相似,但它们的运行速度比我的速度快得多。 我的问题是,是什么让我的代码效率低下?我在这里缺少什么?
谢谢^^
答案 0 :(得分:0)
你的方法是直截了当的。
您可以使用动态编程来改进运行时(复杂性方法)。
我们假设您想要计算5.您将拥有: 5 - &gt; 16 - &gt; 8 - &gt; 4 - &gt; 2 - &gt; 1。 但是,如果你这样做,你也将计算8和16的值。 我们的想法是存储您已经计算过的值,以便在以后需要时保存工作。
处理算法的复杂性将是一些问题的关键,所以最好早点适应它。
它很慢的另一个原因是语言的选择。例如,尝试使用C,它会运行得更快。