Java 递归地得到n的回文

Java 递归地得到n的回文,java,recursion,Java,Recursion,用户输入n,递归方法返回n的回文 例如: 对于n=3方法打印:3 对于n=13方法打印:1331 对于n=133方法打印:13331 基本上,该方法反转n,然后将其添加到原始n 我知道如何打印倒过来的n,但是我在保存倒过来的数字时遇到了问题。我如何升级下面的代码以返回n+n(1331) 公共类测试{ 公共静态无效回文(int n){ 如果(n

用户输入n,递归方法返回n的回文

例如:

  • 对于
    n=3
    方法打印:
    3
  • 对于
    n=13
    方法打印:
    1331
  • 对于
    n=133
    方法打印:
    13331
基本上,该方法反转
n
,然后将其添加到原始
n

我知道如何打印倒过来的n,但是我在保存倒过来的数字时遇到了问题。我如何升级下面的代码以返回n+n(1331)

公共类测试{
公共静态无效回文(int n){
如果(n<10){
系统输出打印(n);
返回;
}
否则{
系统输出打印(n%10);
回文(n/10);
}
}
公共静态void main(字符串[]args){
回文(13);
}
}

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

你也这么说:

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);
    }
} 
公共静态无效回文(int n){
回文(n,0);
System.out.println();
}
私有静态无效回文(int n,int迭代){
整数=n;
如果(n<10){
系统输出打印(n);
返回;
}否则{
如果(迭代==0){
系统输出打印(n);
}
反向整数=n%10;
系统输出打印(反向);
迭代++;
回文(n/10,迭代);
}
} 

顺便说一句,它叫回文e,所以我更正了你和我的代码中的名称。

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

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

您可以查看它。

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

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

可能有一个递归的解决方案来确定一个单词是否是回文。您可以看到,确定任何单词是否为回文要复杂得多

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

问题是递归是一个非常高级的概念,所以很难教授。提出这个问题的人不理解递归,所以他们犯了一个错误。这就像需要使用二维数组来解决同样的问题。这在许多深层次上都是错误的

我以前从未遇到过回文示例。它一直是河内的塔楼。所以我没有马上认出它。确定一个单词或短语是否是回文是正确的问题


以下是确定一个短语是否是回文问题的方法,该方法正在comp sci简介讲座(29分钟)中使用:

问题不清楚。如果输入为
133
,则预期结果应为
13331
1331
?结果应为133331,对于输入
3
,结果应为
3
33
?您应该编辑问题并使其清晰。是否允许您先将其转换为字符串?用字符串这样做会更容易听起来你的家庭作业想教你一些关于队列和堆栈的知识,请仔细检查,用我母亲的话来说,这是没有e的回文。但是他需要使用递归而不是循环来创建回文。是的,我理解问题的意思,但这没有意义。问题是不正确的,所以解决方案不会是递归的。为什么它没有意义,是什么使它不正确?
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);
}