递归得到n的回文

时间:2018-05-19 12:11:34

标签: java recursion

用户输入n并且递归方法返回n。

的回文

例如:

  • 对于n = 3方法打印:3
  • 对于n = 13方法打印:1331
  • 对于n = 133方法打印:133331

基本上,方法会反转n,然后将其添加到原始n

我知道如何打印反转的n,但我在保存反转的数字时遇到问题。我怎样才能升级我的代码以返回n + reverse n(1331)?

public class test {
    public static void palindrome(int n) {
        if (n < 10) {
            System.out.print(n);
            return;
        }
        else {
            System.out.print(n % 10);
            palindrom(n/10);
        }
    }

    public static void main(String[] args) {
        palindrome(13);
    }
}

3 个答案:

答案 0 :(得分:3)

以下代码可以解决您的问题:

public static void main(String args[]){
    System.out.println(palindrome(133));
}

private static int palindrome (int n){
     return palindrome(n,n);
}

private static int palindrome( int n, int r ){
    if(r==0)
        return n;
    return palindrome(n*10+r%10,r/10);
}

您可以查看here

答案 1 :(得分:1)

这是一个非常好的问题。我不确定是否可以使用单个递归函数,但我找到了使用间接递归的解决方案(如果我错了,请纠正我)。问题是只需要在第一次迭代时打印整个数字,然后逐个打印数字。

你称之为:

palindrome(3); // results in 3
palindrome(13); // results in 1331
palindrome(133); // results in 133331
palindrome(1330); // results in 13300331

这是代码。

public static void palindrome(int n) {
    palindrom(n, 0);
    System.out.println();
}

private static void palindrome(int n, int iteration) {
    int number = n;
    if (n < 10) {
        System.out.print(n);
        return;
    } else {
       if (iteration == 0) {
            System.out.print(n);
        }
        int reverse = n%10;
        System.out.print(reverse);
        iteration++;
        palindrom(n/10, iteration);
    }
} 

顺便说一下。它被称为palindrom e ,因此我更正了您的代码和我的代码中的名称。

答案 2 :(得分:-1)

您在解决问题时遇到问题,因为它不是递归问题。它只是一个循环的。字符串是一个数组,解决方案是简单地反转它。所以解决方案是使用递归来对数组索引进行数学运算。

递归与循环无关。将函数作为参数传递给自身不会产生递归。

可能有一个递归解决方案来确定一个单词是否是回文。你可以看出确定任何单词是否是回文是多么复杂。

[编辑5-21-18:试图澄清我的回答]

问题在于递归是一个非常高级的概念,因此教学非常困难。创建此问题的人不理解递归,因此他们犯了一个错误。这就像要求使用二维数组来解决同样的问题。这在许多深层次上是不正确的。

之前我没有遇到回文的例子。它总是河内的塔。所以我没有立刻认出来。确定单词或短语是否是回文是正确的问题。

这是确定一个短语是否是回顾性问题正在用于复杂科学讲座(29分钟):MIT Opencourseware on Youtube