Java 为什么我的函数不能给出正确的输出?
我的函数检查数组是否使用递归进行排序。 不幸的是,对于每个数组,它都返回Java 为什么我的函数不能给出正确的输出?,java,algorithm,sorting,recursion,Java,Algorithm,Sorting,Recursion,我的函数检查数组是否使用递归进行排序。 不幸的是,对于每个数组,它都返回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 ; }
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 ;
}
函数调用:排序(a,0,a.length),其中a[]={1,2,3};
布尔排序(int[]a,int s,int n)
{
如果(s+1==n)
返回true;
如果(a[s]您不使用递归调用的结果,可能看起来
if(a[s]<=a[s+1])
return sorted(a,s+1,n)
else
return false;
if(a[s]您不使用递归调用的结果。也许它看起来像
if(a[s]<=a[s+1])
return sorted(a,s+1,n)
else
return false;
如果(a[s]忽略对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 ;
}
布尔排序(int[]a,int s,int n)
{
如果(s+1==n)
返回true;
如果(a[s]忽略对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 ;
}
布尔排序(int[]a,int s,int n)
{
如果(s+1==n)
返回true;
如果(a[s]当您可以使用迭代进行时,为什么要使用递归方法?您的意思是返回排序的(a,s+1,n)
?当前您正在丢弃递归调用的返回值。我知道。我只是在学习递归。这是一个简单的程序,但我一直在学习它。@khelwood非常感谢。它很有效。如果条件为真,我就递归调用。如果条件不满足,它应该返回false。最后,它应该返回true。既然可以使用迭代,为什么还要使用递归方法呢?您的意思是返回排序的(a,s+1,n)
?当前您正在丢弃递归调用的返回值。我知道。我只是在学习递归。这是一个简单的程序,但我一直在学习它。@khelwood非常感谢。它很有效。如果条件为真,我就递归调用。如果条件不满足,它应该返回false。最后,它应该返回true。返回和不返回它之间有什么区别。你能解释一下吗?我有点困惑。因为在这两种情况下,递归都存在,@akisonlyforu不返回,你只是对结果不做任何处理。即使递归以true
终止,你也只从最后一行返回false
。什么将是返回和不返回它之间的区别。你能解释一下吗?我有点困惑。因为在这两种情况下,递归都存在,@akisonlyforu不返回,你只是对结果不做任何处理。即使递归以true
终止,你也只是从最后一行返回false
。你会怎么做我是返回和不返回的区别。你能解释一下吗?我有点困惑。因为在这两种情况下,递归都存在。当你只调用递归函数而不分配它的结果时,你完全忽略了它的工作。调用链将在数组端结束,但你不知道检查结果。想象一下你要求公共汽车上有人给你买票。最后一个人拿到票却不退票…退票和不退票的区别是什么。你能解释一下吗?我有点困惑。因为在这两种情况下,递归都存在。当你只调用递归函数而不指定其结果时,你忽略了它的工作全部。呼叫链将在数组端结束,但您不知道检查结果。假设您要求公共汽车上的一些人为您买票。最后一个人拿到票却不退票。。。