0
public static boolean palindrome(String input, int i, int j)
 {
  if (i >= j)
   return true;
  if (input.charAt(i) == input.charAt(j))
  {
   i++;
   j--;
   palindrome(input, i, j);
  }
  else if (input.charAt(i) != input.charAt(j))
   return false;
 }

由于“缺少返回类型”,我的 Java 平台 (eclipse) 不接受此代码工作。现在我知道在正确的编码中,最好只使用一个返回值,但是当涉及到递归时,这对我来说有点新。我该怎么做呢?如果我在这个方法的顶部实例化一个布尔类型,它会在每次方法运行时创建该变量的一个新实例(并将其实例化为 null 或我设置的任何值),但如果我将它放在我的构造函数之上,我的方法不会为其分配值/无法返回它。

基本上,我该如何修改我的代码以拥有一个 Eclipse 将一如既往地接受的返回值?我可以使用循环轻松地做到这一点,但我不确定如何使用递归来处理这个主题。

4

7 回答 7

3

只是为了提高可读性:

public static boolean palindrome(String input, int i, int j)
{
    if (i >= j)
        return true;

    if (input.charAt(i) != input.charAt(j))
        return false;

    return palindrome(input, i + 1, j - 1);
}

如果我们可以使用 C# 和 Linq(因为我这里没有 Java 开发环境)来反转 char 数组:

public static bool palindrome(String input)
{
    return input.Equals(new String(input.ToCharArray().Reverse().ToArray()));
}
于 2009-10-16T19:59:44.107 回答
2

问题是您在第二个 if 语句中没有返回。如果 charAt i 和 j 相等,你永远不会返回任何东西。

保持代码的精神,我会将整个事情缩短为:

public static boolean palindrome(String input, int i, int j)
{
  if (i >= j)
  {
    return true;
  }

  if (input.charAt(i) == input.charAt(j))
  {
    return palindrome(input, i + 1, j - 1);
  }

  return false;
}
于 2009-10-16T19:38:48.693 回答
1

你当然可以这样做:

return palindrome(input, i, j);

但是,最好使用一次返回来提高可读性。试穿这个尺寸:

   boolean isPalindrome = false; 
   if (i >= j)
   isPalindrome = true;
   else if (input.charAt(i) == input.charAt(j))
  {
   i++;
   j--;
   isPalindrome = palindrome(input, i, j);
  }
  else if (input.charAt(i) != input.charAt(j))
   isPalindrome = false;
  return isPalindrome;
 }

始终实例化该布尔值。这里的关键是让回文的返回值存储在该布尔值中。

递归部分在调用回文时出现。它只会在所有递归调用之后最终返回最终值,因为它只会在到达递归循环结束时确定它是否是回文。

于 2009-10-16T19:36:04.200 回答
1

在第二个 if 块中,您不返回任何内容。

只需更改递归调用,以便返回其值:

  返回回文(输入,i,j);

另外,顺便说一句,您不需要在 if 块中执行 i++ 和 j-- ——您可以改为使用 i+1 和 j-1 调用回文方法,这将具有基本相同的效果。

于 2009-10-16T19:36:27.013 回答
0
        public static String palindrome(String input, int i, int j)
         {

            if (i >= j)
                return "-1";    

         //--------------------------------------------//   

          if (input.charAt(i) == input.charAt(j))
          {
              i++;
              j--;

         //--------------------------------------------//         

              palindrome(input, i, j);
              return "is palindrom";      
          }

         //--------------------------------------------//     

          else 
              return "not palindrom";
          }
           }
         //--------------------------------------------//
于 2013-03-12T10:02:05.253 回答
0

另一种选择可能是这样的:

boolean isPalindrome(String s) {

        boolean ret = true;

        if (s.length() == 1 || s.equals("")) {
            return ret;
        } else {
            char first = s.charAt(0);
            char last = s.charAt(s.length() - 1);
            if (first != last)
                ret = false;
            else if (s.length() > 2) {
                String partial = s.substring(1, s.length() - 1);
                ret = isPalindrome(partial);
            }
        }
        return ret;
    }
于 2013-11-02T05:18:21.527 回答
0

可能这个答案可以帮助(在 Python 中):

def isPalinr(str1):
    if len(str1)<=1:
        print('Palindrome')
        return
    if (str1[0] != str1[-1]):
        print ('Not palindrome')
        return
    else:
        return isPalinr(str1[1:len(str1)-1])

尽管我们可以在第一'if'个子句中返回字符串,但这将返回 None,因为程序最终将在该点停止。

于 2017-04-18T19:39:13.390 回答