首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从递归方法返回布尔值

从递归方法返回布尔值
EN

Stack Overflow用户
提问于 2020-01-24 03:13:24
回答 2查看 424关注 0票数 0

这是一个补充问题,与我最近提出的一个问题一致。我有下面的递归代码,它将给我一个整数列表中的最大数

代码语言:javascript
运行
复制
     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,这取决于列表的值增加或减少的位置。所以我的方法是:

代码语言:javascript
运行
复制
     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 =假

谢谢你的帮助,我真的很纠结于递归的整个概念.....

EN

回答 2

Stack Overflow用户

发布于 2020-01-24 03:35:53

你可能遗漏了一些东西:

在函数中,return语句会立即终止(break)函数。所以在

代码语言:javascript
运行
复制
if(...) { return ...; }
else {...}

如果条件为真,则→else是多余的,函数已经终止(break)

a==0这样的东西有一个布尔值(truefalse)。所以

代码语言:javascript
运行
复制
if(i==0) { return true; }
else { return false; }

可以缩写为return count==0;

我建议总是使用大括号,因为像if(i==0) ++i; break;这样的东西,意思是if(i==0) {++i;}。在任何情况下都会调用break;

你想要的东西是这样的:

代码语言:javascript
运行
复制
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);
}
票数 1
EN

Stack Overflow用户

发布于 2020-01-24 03:25:24

代码语言:javascript
运行
复制
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等)来解决此问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59885628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档