Java 从递归方法返回布尔值
这是一个补充问题,与我最近提出的一个问题一致。我有下面的递归代码,它将给出整数列表中的最大数Java 从递归方法返回布尔值,java,recursion,Java,Recursion,这是一个补充问题,与我最近提出的一个问题一致。我有下面的递归代码,它将给出整数列表中的最大数 static int maximum (List<Integer> a) { if ((a.getTail().isEmpty())) return 0; else { int n = maximum(a.getTail()); System.out.println(n); if (a.getHead()
static int maximum (List<Integer> a)
{
if ((a.getTail().isEmpty()))
return 0;
else {
int n = maximum(a.getTail());
System.out.println(n);
if (a.getHead() > n) {
return (a.getHead());
} else {
return m;
}}
}
静态整数最大值(列表a)
{
if((a.getTail().isEmpty())
返回0;
否则{
int n=最大值(a.getTail());
系统输出println(n);
如果(a.getHead()>n){
返回(a.getHead());
}否则{
返回m;
}}
}
这很有帮助。但我真正想做的是能够根据列表中值的增加或减少返回布尔值true或false。所以我的方法是:
static boolean maximum (List<Integer> a)
{
if ((a.getTail().isEmpty()))
return true;
else {
int n = maximum(a.getTail());
System.out.println(n);
if (a.getHead() > n) {
return true;
} else {
return false;
}}
}
静态布尔最大值(列表a)
{
if((a.getTail().isEmpty())
返回true;
否则{
int n=最大值(a.getTail());
系统输出println(n);
如果(a.getHead()>n){
返回true;
}否则{
返回false;
}}
}
但这不会运行。我面临的挑战是,我编写的递归调用返回一个整数,这样我就可以比较上一个最大值和当前最大值------if(a.getHead()>m)
我想做的是在递归调用中尝试并完成对当前韵文previous max的评估,这样我只需要返回一个布尔值,true或false
例如,如果递归发生时,列表不断增加,则布尔值保持为真,但如果在任何一点上它减少,则会给出一个假值:
1,2,3,4=真
1,2,4,3=错误
谢谢你的帮助,我真的很难理解递归的整个概念……静态布尔最大值(列表a,布尔cont){
static boolean maximum (List<Integer> a, boolean cont){
if(cont){
if ((a.getTail().isEmpty())){
cont = false;
}else {
int n = maximum(a.getTail());
System.out.println(n);
if (a.getHead() > n) {
maximum(a.getHead(), cont);
} else {
maximum(n, cont);
}
}
}
return cont;
}
如果(续){
if((a.getTail().isEmpty()){
cont=假;
}否则{
int n=最大值(a.getTail());
系统输出println(n);
如果(a.getHead()>n){
最大值(a.getHead(),cont);
}否则{
最大值(n,续);
}
}
}
返回控制;
}
我想让这个方法无效或者返回列表,但我把它保留为布尔值,因为从技术上讲这就是你的问题所要求的
您只需调用cont值为true的方法。通过使用两个参数,您可以继续比较max函数,同时使用布尔值作为递归标志。但是,您无法返回最大值,但可以通过将最大值设置为类实例或作为第三个参数(Double、Integer等)的对象来解决此问题。您可能遗漏了一些内容: 在函数中,return语句立即终止函数(
break
)。所以在
if(...) { return ...; }
else {...}
→ else是冗余的,如果条件为真,则函数已终止(break
)
类似于a==0
的东西有一个布尔值(true
或false
)。所以
可以缩短为返回计数==0代码>
我建议总是使用大括号,因为类似于if(I==0)++I;中断
,表示如果(i==0){++i;}
<代码>中断代码>在任何情况下都将被调用
您想要的是这样的:
静态布尔值已排序(列表)
{
返回从(0,列表)中排序;
}
静态布尔值是从中排序的(整数索引,列表)
{
如果(index+1>=a.size()){return true};
返回list.get(index)
当您只传入一个列表时,最大值函数如何返回布尔值?对不起,我的问题不清楚,我将对其进行编辑,所以您真的只想检查它是否正确-简单地说-谢谢您显然您没有尝试编译此函数。不-我知道它不会编译。这说明了我正在尝试实现的目标。这不是getTail或类列表的getHead方法,所以我不确定您希望编译WSJ的是什么。imo有点挑剔,因为它只是概念性的,但我缩短了它以消除任何可能的混淆。有些人会在没有解释的情况下简单地否决它。感谢我指出了这一点。我认为删除如果(a.isEmpty()){return false;}
是的,做任何你想做的事都是安全的。你是对的,一个空列表可以被称为排序
if(i==0) { return true; }
else { return false; }
static boolean is_sorted(List<Integer> list)
{
return is_sorted_from(0, list);
}
static boolean is_sorted_from(int index, List<Integer> list)
{
if(index+1 >= a.size()) { return true };
return list.get(index) < list.get(index+1)
&& is_next_sorted(index+1, list);
}