我只是学习递归而我是以相反的顺序打印输入数组(不使用任何String或Character方法)。
例如4295
将显示为5924
。
public static void method_c(int n) {
if (n > 0) {
System.out.println(n % 10);
n /= 10;
}
有这个代码,但它只返回5
,所以我猜它不会通过做递归。我认为它可能是n /= 10
的位置,但这只会改变返回的数字。
如何修复它以返回打印整个整数?
答案 0 :(得分:11)
递归的基础是从内部再次调用相同的方法,这是缺失的。
public static void method_c(int n)
{
if (n > 0)
{
System.out.print(n % 10);
n /= 10;
method_c(n);
}
}
这应解决问题。
答案 1 :(得分:2)
正如其他人已经指出的那样:为了使您的方法有效,请将您的if
更改为while
:
public static void method_c(int n) {
while (n > 0) {
System.out.println(n % 10);
n /= 10;
}
}
从您的描述来看,这里似乎存在一个重要的误解:您正在做的是迭代和不是递归。为了快速了解迭代和递归之间的差异,请查看here。
答案 2 :(得分:1)
对于递归,您忘记了除了基本情况之外,您必须在其自身内部调用方法,因此您需要:
public static void method_c(int n) {
if (n != 0) {
Boolean negative = false;
if (n<0) {
n*=-1;
negative = true;
}
System.out.print(n % 10);
method_c(n/10);
if (negative) System.out.print("-");
}
}
在n / 10上调用method_c,除非n为0,否则将使函数递归。
答案 3 :(得分:1)
正在使用减号!!!
public static void main(String[] args) {
for(int i=0; i<15; i++) {
int number = (int) (System.nanoTime()%1000)-500; //random number
System.out.println(number+" - "+method_c(number)); //printing
}
}
public static int method_c(int number) {
String output = number<0?"-":"";
if(number<0)number=-number;
while (number > 0) {
output += number % 10 + "";
number /= 10;
}
return Integer.parseInt(output);
}
示例输出:
73 - 37
120 - 21
-395 - -593
216 - 612
-78 - -87
... more
答案 4 :(得分:0)
如果您将if
更改为while
将获得所需的结果,但它将是迭代的,而不是递归的。在检查到满足基本停止条件后,递归方法将调用自身。你可能想要写一些类似的东西:
public static void method_c(int n) {
if (n > 0) {
System.out.println(n % 10);
method_c(n / 10);
}
}