这样能很快提高速度吗?

时间:2023-01-31 21:15:22
最近遇到这样一个递归的问题:

void dfs(参数)
{
if (表达式)   
     dfs(参数);           <--------
else if (表达式)
     for (int i = 0; i < 100; i++)
     {
          dfs(参数);
          表达式;
     }
}


void dfs(参数)
{
     for (int i = 0; i < 100; i++)
     {
         if (表达式)
              dfs(参数);  <--------
         else if (表达式)
              dfs(参数);
         表达式;
     }
}



上面两段代码的结果是一样的,但是上面一段代码会比下面这一段快10倍以上,这是为什么呢?

10 个解决方案

#1


         if (表达式)
              dfs(参数);  <--------

这段代码有可能被重复执行100遍

#2


慢的程序中 for 循环体中执行的语句(包含需要递归的语句)多

#3


下面那个无论表达式是否成立,都要循环。
上面那个如果表达式不成立,就不循环了。而且编译器可以对上面那个进行优化,以提高速度。

#4


我是来拿分的,哈哈!

#5


嗯,就是重复执行了

#6


觉得有点问题,
请楼主贴代码

#7


可以改成非递归DFS,这样比你第一种应该要再快个10倍。

#8


第1个代码只判断1次就够了
第2个代码则要做100次判断

#9


下面那个程序,每一次循环都需要执行一次if,时间复杂程度自然高过上面那段程序呀,自己可以算下平均时间复杂程度,就一目了然了呀,lz应该看下<<数据结构>>,不同的结构对程序影响还是比较大的....

#10


下面判断的次数多了。

#1


         if (表达式)
              dfs(参数);  <--------

这段代码有可能被重复执行100遍

#2


慢的程序中 for 循环体中执行的语句(包含需要递归的语句)多

#3


下面那个无论表达式是否成立,都要循环。
上面那个如果表达式不成立,就不循环了。而且编译器可以对上面那个进行优化,以提高速度。

#4


我是来拿分的,哈哈!

#5


嗯,就是重复执行了

#6


觉得有点问题,
请楼主贴代码

#7


可以改成非递归DFS,这样比你第一种应该要再快个10倍。

#8


第1个代码只判断1次就够了
第2个代码则要做100次判断

#9


下面那个程序,每一次循环都需要执行一次if,时间复杂程度自然高过上面那段程序呀,自己可以算下平均时间复杂程度,就一目了然了呀,lz应该看下<<数据结构>>,不同的结构对程序影响还是比较大的....

#10


下面判断的次数多了。

相关文章