函数返回undefined。为什么?

时间:2017-07-27 10:25:12

标签: javascript algorithm

这与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,为什么?

2 个答案:

答案 0 :(得分:1)

请先了解recursion:D

递归调用需要调用自身,这意味着您需要返回kangaroo

return kangaroo(x1+v1,v1,x2+v2,v2);

答案 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;
  }
 }