在编写干净的代码与提高性能开销之间,我有一个小的冲突。
假设我正在使用JAVA中的递归扫描NxN数组,而我唯一的停止条件是停留在数组边界。
我可以编写如下的函数,它更简洁易读:
private void move(int x, int y){
if(outOfBound(x,y)){ \\ stopping condition
return;
}
move(x+1, y);
move(x, y+1);
move(x-1, y);
move(x, y-1);
}
或者我可以这样写:
private void move(int x, int y){
if(!outOfBound(x+1,y)){ \\ stopping condition
move(x+1, y);
}
if(!outOfBound(x,y+1)){ \\ stopping condition
move(x, y+1);
}
if(!outOfBound(x-1,y)){ \\ stopping condition
move(x-1, y);
}
if(!outOfBound(x,y-1)){ \\ stopping condition
move(x, y-1);
}
}
据我所知,可以保存4N个递归调用(4N个新的堆栈帧)。
那么,编写第二个函数以避免不必要的调用会“更正确”吗?
答案 0 :(得分:1)
解决这一难题的方法只有一种-在实际项目环境中衡量性能。
如果这严重影响了现实生活中的性能并成为瓶颈,请务必将其更改为次优状态。
另一方面,如果它并没有真正改变应用程序的整体性能,请使其更加清洁。由于代码肮脏而引入的一个错误,以纯美元计算的成本要比与代码肮脏的服务器相关的成本高得多。