递归方法,逐行打印数字的数字

时间:2013-09-10 13:40:12

标签: java methods recursion numbers integer

我应该使用递归方法垂直打印出数字的数字。

例如,如果我要键入13749,则输出为:

1
3
7
4
9

我该如何处理这个问题?它还声明我应该使用if / else方法来检查基本情况。我刚开始学习java而且我并不擅长它:(

import java.util.Scanner;

public class test2 {
  public static void main (String [] args){
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter a positive integer: ");
    int n = sc.nextInt();
    System.out.println();
    System.out.println(numbers(n));  

  } 

public static int numbers(int n){
  int sum;
  if (n == 0) {
    sum = 1;
    } else {

     System.out.println(n%10);
     sum = numbers(n / 10) + (n % 10);


    }
  return sum;
  }      
}

7 个答案:

答案 0 :(得分:2)

我今天在接受采访时被问到这个问题!

 public class Sandbox {
   static void prints(int d) {
        int rem = d % 10;
        if (d == 0) {
            return;
        } else {
            prints(d / 10);
        }
        System.out.println(rem);
    }

    public static void main(String[] args) {
        prints(13749);
    }
}

输出:

1
3
7
4
9

答案 1 :(得分:1)

你问过如何解决这个问题,所以我会给你一个提示:构建堆栈然后开始打印输出要容易得多。它也不涉及操纵字符串,这在我的书中是一个很大的优点。操作顺序如下:

  1. 检查基本情况并返回
  2. 递归通话
  3. 打印
  4. 这样,当您到达基本案例时,您将从尾部开始打印到呼叫的头部:

    recursive call 1
        recursive call 2
            recursive call 3
                .... reached base case
            print 3
        print 2
    print 1
    

    这样你就可以简单地打印数字%10并使用数字/ 10进行递归调用,基本情况是数字为0时。

答案 2 :(得分:1)

class PrintDigits {

   public static void main(String[] args) {
     String originalNumber, reverse = "";

     // Creating an Scanner object
     Scanner in = new Scanner(System.in);

     System.out.println("Enter a number:");
     // Reading an input 
     originalNumber = in.nextLine();

     // Calculating a length
     int length = originalNumber.length();

     // Reverse a given number
     for ( int i = length - 1 ; i >= 0 ; i-- )
        reverse = reverse + originalNumber.charAt(i);
     //System.out.println("Reverse number: "+reverse);
     digits(Integer.parseInt(reverse));
   }

   /* digits of num */
   public static void digits(int number) {
       if (number == 0)
          System.out.println("");
       else {
          int mode=10;
          System.out.println(+number%mode);
          digits(number/mode);
       }
   }
}

答案 3 :(得分:1)

这是我在C ++中的代码

只需为Java修改它。您需要在调用函数后显示数字,这样您首先显示最后一个...根据s.ts的答案

void recursive(int n) {
    if (n < 10)
        cout << n << endl;
    else
    {
        recursive(n / 10);
        cout << n % 10 << endl;
    }
}

答案 4 :(得分:0)

If number consists of more than one digit print ( n / 10 )

print ( n % 10 )

如果您希望以其他顺序打印

print ( n % 10 )

If number consists of more than one digit print ( n / 10 )

答案 5 :(得分:0)

试试这个

public class Digits {

    public static void main(String[] args) {
        printDigits(13749);
    }

    private static void printDigits(Integer number) {
        int[] m = new int[number.toString().toCharArray().length];

        digits(number, 0, m, 0);

        for (int i= m.length - 1; i>=0; i--) {
            System.out.println(m[i]);
        }
    }

    public static int digits(int number, int reversenumber, int[] m, int i) {

        if (number <= 0) {
            return reversenumber;
        }

        m[i] = (number % 10);
        reversenumber = reversenumber * 10 + (number % 10);
        return digits(number/10, reversenumber, m, ++i);
    }

}

答案 6 :(得分:0)

Python示例

def printNoVertically(number):
    if number <  9:
      print(number)
      return
    else:
        printNoVertically(number/10)
        print(number % 10)