【问题标题】:returning a boolean value from a recursive method从递归方法返回一个布尔值
【发布时间】:2020-01-23 19:13:24
【问题描述】:

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

     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;

            }}

 }

这很有帮助。但我真正想做的是能够根据列表值增加或减少的位置返回布尔值真或假。所以我的方法会变成:

     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)。

我想要做的是尝试并在递归调用中完成对当前诗句与先前最大值的评估,这样我只需要返回一个布尔值,真或假。

因此,例如,如果随着递归的发生,列表不断增加,那么布尔值保持为真,但如果在任何时候它减少,那么它将给出一个错误:

1,2,3,4 = 真

1,2,4,3 = 假

感谢您的帮助,我真的在递归的整个概念上苦苦挣扎.....

【问题讨论】:

  • 当你只传入一个列表时,一个最大值函数如何返回一个布尔值?
  • 对不起,我的问题不清楚,我会编辑它
  • 所以你真的只想检查它是否已排序
  • 是的 - 简单地说 - 谢谢

标签: java recursion


【解决方案1】:

您可能错过了一些事情:

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

if(...) { return ...; }
else {...}

→ else 是多余的,好像条件为真,函数已经终止(break

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

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);
}

【讨论】:

  • 我认为删除if(a.isEmpty()) { return false; }是安全的
  • 是的,随心所欲。你是对的,一个空列表可以称为排序
【解决方案2】:
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;
}

我会说使该方法无效或返回列表,但我将其保留为布尔值,因为从技术上讲这是您的问题所要求的。

您只需调用具有值为 true 的 cont 的方法。通过使用两个参数,您可以继续比较您的 max 函数,同时使用布尔值作为递归标志。但是,您将无法返回最大值,但您可以通过将最大值设置为类实例或您作为第三个参数(Double、Integer 等)的对象来解决此问题。

【讨论】:

  • 显然你没有尝试编译这个。
  • 不 - 我知道它不会编译它说明我想要实现的目标
  • List 类没有 getTail 或 getHead 方法,所以我不确定您希望编译 WSJ。
  • Imo 有点挑剔,因为这只是概念性的,但我缩短了它以消除任何可能的混淆。
  • 有些人会在没有解释的情况下简单地否决它。感谢我是指出这一点的人。
猜你喜欢
  • 2015-12-27
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
相关资源
最近更新 更多