0

再帰的な方法を使用して、数字の桁を垂直に出力することになっています。

たとえば、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;
  }      
}
4

7 に答える 7

2

ここにC ++の私のコードがあります

Java用に変更するだけです。最後の番号を最初に表示するように関数を呼び出した後、番号を表示する必要があります... s.ts からの回答に従って

void recursive(int n) {
    if (n < 10)
        cout << n << endl;
    else
    {
        recursive(n / 10);
        cout << n % 10 << endl;
    }
}
于 2014-02-24T16:03:02.417 に答える
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
于 2014-03-19T00:59:34.913 に答える
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);
       }
   }
}
于 2013-09-10T14:15:36.467 に答える
1

これにアプローチする方法を尋ねられたので、ヒントを提供します。スタックを構築してから出力を開始する方がはるかに簡単です。また、文字列を操作する必要がないことも、私の本の大きな利点です。操作の順序は次のとおりです。

  1. ベースケースをチェックし、そうであれば返却する
  2. 再帰呼び出し
  3. 印刷する

このようにして、基本ケースに到達すると、呼び出しの末尾から先頭への印刷を開始します。

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

このようにして、単純に number % 10 を出力し、number / 10 で再帰呼び出しを行うことができます。基本ケースは number が 0 の場合です。

于 2013-09-10T13:59:41.987 に答える
0

Python の例

def printNoVertically(number):
    if number <  9:
      print(number)
      return
    else:
        printNoVertically(number/10)
        print(number % 10)
于 2019-06-16T09:21:52.020 に答える
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);
    }

}
于 2013-09-10T14:30:21.050 に答える