Javascript 函数返回未定义的。为什么?

Javascript 函数返回未定义的。为什么?,javascript,algorithm,Javascript,Algorithm,这与HackerRank算法问题“”有关 这是我的密码: 功能袋鼠(x1,v1,x2,v2){ //完成此功能 如果(x2>x1&&v2>v1)返回“否”; 如果(x1>x2&&v1>v2)返回“否”; 如果(x1==x2){ 返回“是”; }否则{ 袋鼠(x1+v1,v1,x2+v2,v2); } } var结果=袋鼠(0,3,4,2); 控制台日志(结果)请了解第一个:D 递归调用需要调用自身,这意味着您需要返回kangaroo return kangaroo(x1+v1,v1,x2+

这与HackerRank算法问题“”有关

这是我的密码:

功能袋鼠(x1,v1,x2,v2){
//完成此功能
如果(x2>x1&&v2>v1)返回“否”;
如果(x1>x2&&v1>v2)返回“否”;
如果(x1==x2){
返回“是”;
}否则{
袋鼠(x1+v1,v1,x2+v2,v2);
}
}  
var结果=袋鼠(0,3,4,2);
控制台日志(结果)请了解第一个:D

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

return kangaroo(x1+v1,v1,x2+v2,v2);
这看起来是一样的:

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;
  }
 }  
return kangaroo(x1+v1,v1,x2+v2,v2)
您没有返回递归调用的结果,该调用可能重复