我们在遍历一个问题,有时需要对不同情况都需要对参数做不同的修改。 如果有些参数仅仅是几个变量,我们在写代码时需要用数学表达式。
比如 next (int i, int j) 对四个方向遍历
写成 i++; next(i,j) 那么后面别的情况就比影响了,所以i,j在这里不能改变。所以应该写成next(i+1,j)
有时候参数是数组,并且不同情况需要修改一次,如果对每种情况都新生成一个copy,那么效率就太低了。 比如PKU ACM 3009 : 处理这种情况的办法如下:
void next(int i, int j, int *map, int n)
map[nPos(p,j)] = 0; // 修改
next(p-1,j,map,n+1); // 一种情况的递归调用
map[nPos(p,j)] = 1; // good idea 但是又复原了