用户输入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);
}
}
答案 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