这与HackerRank算法问题' Kangaroo'有关。
这是我的代码:
function kangaroo(x1, v1, x2, v2) {
// Complete this function
if(x2>x1 && v2>v1)return "NO";
if(x1>x2 && v1>v2)return "NO";
if(x1 == x2){
return "YES";
}else{
kangaroo(x1+v1,v1,x2+v2,v2);
}
}
var result = kangaroo(0,3,4,2);
console.log(result);

这是问题所在:
在数字线上有两个袋鼠准备向正方向跳跃(即朝向正无穷大)。第一只袋鼠从位置开始,以每次跳跃的速度移动。第二只袋鼠从位置开始,以每次跳跃的速度移动。鉴于每只袋鼠的起始位置和移动速度,您能否确定他们是否会同时降落在同一地点?
x1是袋鼠1的起点。
v1-是袋鼠1的速度。
x2是袋鼠2的起点。
v2是袋鼠2的速度。
我的代码返回undefined
,为什么?
答案 0 :(得分:1)
答案 1 :(得分:0)
这看起来可能相同:
function kangaroo(x1, v1, x2, v2) {
if(x2>x1 && v2>v1)return "NO";
if(x1>x2 && v1>v2)return "NO";
if(x1 == x2) return "YES";
return kangaroo(x1+v1,v1,x2+v2,v2);
}
但实际上它可能会对尾调用进行优化,因此运行速度要快得多,因为它的运行方式如下:
function kangaroo(x1, v1, x2, v2) {
while(true){
if(x2>x1 && v2>v1)return "NO";
if(x1>x2 && v1>v2)return "NO";
if(x1 == x2) return "YES";
x1=x1+v1,x2=x2+v2;
}
}