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遍
dfs(参数); <--------
这段代码有可能被重复执行100遍
#2
慢的程序中 for 循环体中执行的语句(包含需要递归的语句)多
#3
下面那个无论表达式是否成立,都要循环。
上面那个如果表达式不成立,就不循环了。而且编译器可以对上面那个进行优化,以提高速度。
上面那个如果表达式不成立,就不循环了。而且编译器可以对上面那个进行优化,以提高速度。
#4
我是来拿分的,哈哈!
#5
嗯,就是重复执行了
#6
觉得有点问题,
请楼主贴代码
请楼主贴代码
#7
可以改成非递归DFS,这样比你第一种应该要再快个10倍。
#8
第1个代码只判断1次就够了
第2个代码则要做100次判断
第2个代码则要做100次判断
#9
下面那个程序,每一次循环都需要执行一次if,时间复杂程度自然高过上面那段程序呀,自己可以算下平均时间复杂程度,就一目了然了呀,lz应该看下<<数据结构>>,不同的结构对程序影响还是比较大的....
#10
下面判断的次数多了。
#1
if (表达式)
dfs(参数); <--------
这段代码有可能被重复执行100遍
dfs(参数); <--------
这段代码有可能被重复执行100遍
#2
慢的程序中 for 循环体中执行的语句(包含需要递归的语句)多
#3
下面那个无论表达式是否成立,都要循环。
上面那个如果表达式不成立,就不循环了。而且编译器可以对上面那个进行优化,以提高速度。
上面那个如果表达式不成立,就不循环了。而且编译器可以对上面那个进行优化,以提高速度。
#4
我是来拿分的,哈哈!
#5
嗯,就是重复执行了
#6
觉得有点问题,
请楼主贴代码
请楼主贴代码
#7
可以改成非递归DFS,这样比你第一种应该要再快个10倍。
#8
第1个代码只判断1次就够了
第2个代码则要做100次判断
第2个代码则要做100次判断
#9
下面那个程序,每一次循环都需要执行一次if,时间复杂程度自然高过上面那段程序呀,自己可以算下平均时间复杂程度,就一目了然了呀,lz应该看下<<数据结构>>,不同的结构对程序影响还是比较大的....
#10
下面判断的次数多了。