这是一个补充问题,与我最近提出的一个问题一致。我有下面的递归代码,它将给我一个整数列表中的最大数
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;
}}
}这很有帮助。但我真正想做的是能够返回布尔值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;
}}
}但这不会运行。我面临的挑战是,我编写的递归调用返回一个整数,这样我就可以将之前的最大值与当前的最大值进行比较- if (a.getHead() > m)。
我想要做的是在递归调用中尝试并完成对当前与前一个最大值的评估,这样我就只需要返回一个布尔值,true或false。
因此,例如,当递归发生时,如果列表不断增加,则布尔值保持为真,但如果在任何点上它减少,则它将给出一个假:
1,2,3,4 = true
1,2,4,3 =假
谢谢你的帮助,我真的很纠结于递归的整个概念.....
发布于 2020-01-24 03:35:53
你可能遗漏了一些东西:
在函数中,return语句会立即终止(break)函数。所以在
if(...) { return ...; }
else {...}如果条件为真,则→else是多余的,函数已经终止(break)
像a==0这样的东西有一个布尔值(true或false)。所以
if(i==0) { return true; }
else { return false; }可以缩写为return count==0;
我建议总是使用大括号,因为像if(i==0) ++i; break;这样的东西,意思是if(i==0) {++i;}。在任何情况下都会调用break;。
你想要的东西是这样的:
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);
}发布于 2020-01-24 03:25:24
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;
}我会说将方法设为void或返回列表,但我将其保留为布尔值,因为从技术上讲,这正是您的问题所要求的。
您只需在cont的值为true时调用该方法。通过使用两个参数,您可以继续比较max函数,同时使用布尔值作为递归标志。但是,您不能返回最大值,但您可以通过将最大值设置为类实例或作为第三个参数的对象(Double、Integer等)来解决此问题。
https://stackoverflow.com/questions/59885628
复制相似问题