【发布时间】:2021-06-06 23:43:40
【问题描述】:
int min_steps(int target, int move)
{
int x,y,z;
cout<<target<<" "<<move<<endl;
if(target==move || target+move==0)
{
return 1;
}
x = 1 + min_steps(target-move,move+1);
y = 1 + min_steps(target+move,move+1);
z = x<y?x:y;
return z;
}
int main() {
cout<<min_steps(3,1);
return 0;
}
在上述递归函数 min_steps 中,已包含cout 语句来跟踪递归调用。现在min_steps(3,1) 遇到target=2 & move=2 的调用,在这种情况下if condition 持有True & 因此该函数应该返回1 & 中断。但这并没有发生。该函数正在继续进行调用,因此导致Time limit exceeded 错误
【问题讨论】:
-
它确实结束了。你在期待什么?
-
target-move || target+move==0并不代表您认为的意思。相当于写(target-move != 0) || (target+move==0) -
当
target是2和move是2时,为什么你认为if条件成立?2 - 2是0,当转换为bool时是false,2 + 2 == 0也是false,false || false是false。 -
if (target - move || target + move == 0)等价于if (target - move != 0 || target + move == 0)。可能是一个错字,但无论如何,这看起来是个问题。 -
@Brian @Nathan Pierson 抱歉,是的,我明白你在说什么。但即使使用
if(target==move || target+move==0),问题也没有终止。 (我原本打算发布这个,现在编辑问题)。
标签: c++