【问题标题】:Why is my function not giving correct output?为什么我的函数没有给出正确的输出?
【发布时间】:2018-10-28 17:12:38
【问题描述】:

我的函数使用递归检查数组是否已排序。 不幸的是,它为每个数组返回false

Function call : sorted(a,0,a.length) where a[] = {1,2,3}; 

boolean sorted(int[] a , int s , int n)
{
    if(s+1==n)
        return true ;
    if(a[s]<=a[s+1])
        sorted(a,s+1,n);
    return false ;
}

【问题讨论】:

  • 既然可以使用迭代,为什么还要使用递归方法?
  • 你的意思是return sorted(a, s+1, n)?目前,您正在丢弃递归调用的返回值。
  • 我知道。我只是在学习递归。这是一个简单的程序,但我坚持使用它。
  • @khelwood 非常感谢。有用。如果条件为真,我会递归调用。如果条件不满足,它应该返回 false。最后,它应该返回 true。

标签: java algorithm sorting recursion


【解决方案1】:

你不使用递归调用的结果。也许它看起来像

 if(a[s]<=a[s+1])
      return sorted(a,s+1,n)
 else
     return false;

或者(如果 Java 使用复杂条件的快速评估):

return (a[s]<=a[s+1]) && (sorted(a,s+1,n))

【讨论】:

  • 退货和不退货有什么区别。你能解释一下吗?我有点困惑。因为在这两种情况下,递归都存在。
  • 当您只调用递归函数而不分配其结果时 - 您完全忽略了它的工作。调用链将在数组末尾结束,但您不知道检查结果。想象一下,您要求公共汽车上的一些人为您买票。最后一个人拿到了票,却没有退还……
【解决方案2】:

您忽略了对sorted 的递归调用的结果。把它退回去,你应该没问题:

boolean sorted(int[] a , int s , int n)
{
    if(s+1==n)
        return true ;
    if(a[s]<=a[s+1])
        return sorted(a,s+1,n); // Here!      
    return false ;
}

【讨论】:

  • 退货和不退货有什么区别。你能解释一下吗?我有点困惑。因为在这两种情况下,递归都存在,
  • @akisonlyforu 没有返回,你只是不对结果做任何事情。即使递归以true 结束,您也只需从最后一行返回false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 2021-08-18
相关资源
最近更新 更多