递归因子Java

时间:2015-10-29 00:28:45

标签: java recursion factorial

首先,这是一个硬件分配。在Java中遇到递归因子的问题。我在这里和其他地方找到的所有东西都告诉我,我所做的是正确的。但是我遇到了额外步骤的问题。基本上我需要的是1)用户输入数字2)要计算的因子3)如果用户输入除了字符或字符串(而不是int)之外的任何内容以便出现错误消息4)重复的问题直到用户输入“0”退出。

步骤1和2我已经完成了。我遇到了第3步的问题。如果用户输入除int之外的任何东西,我似乎错过了一个return语句,但我似乎无法弄明白究竟是什么。

到目前为止,这是代码:

import java.util.Scanner;

public class Recursive
   {
      public static void main(String[] args)
      {
         int number;             // To hold a number
         char letter;            // To hold a character


         //Create a Scanner object for keyboard input
         Scanner keyboard = new Scanner(System.in);

         //Get a number from the user
         System.out.print("Enter an integer to find the factorial: ");
         number = keyboard.nextInt();

         //Display the factorial
         System.out.println(number + "! is " + factorial(number));
      }  

      private static int factorial(int n)

     {
         if (n == 0)
            return 1;     // Base Case
         else if (n > 0)
            return n * factorial(n-1);
         else (!(n>0))
         return
         System.out.println(number + "is invalid");
      }
    }  

4 个答案:

答案 0 :(得分:0)

获得用户输入后,在进行阶乘之前,我们必须检查输入是否为数字。我们可以使用模式。检查正则表达式模式以执行此操作。在检查它是否是数字之后,检查它是否为零,如果是,则使用exit(0)退出程序。如果不做阶乘

答案 1 :(得分:0)

:manage, Topic.name

答案 2 :(得分:0)

我的回答是基于你的阶乘函数正常工作的假设。为了完成你的步骤3和4,你需要在循环中输入。在该循环中,将输入作为字符串并将其解析为整数,使用try catch以便在给出非整数作为输入时捕获异常,并且可以提示错误消息。

public static void main(String[] args)
  {
     Integer number;             // To hold a number
     String letter;            // To hold a character

     //Create a Scanner object for keyboard input
     Scanner keyboard = new Scanner(System.in);

     //Get a number from the user
     System.out.print("Enter an integer to find the factorial: ");
     while(keyboard.hasNext()){

         letter = keyboard.next();
         try{
             number = Integer.parseInt(letter);
             if(number==0){
                    //Exiting
                    break;
                }
             int fact = factorial(number);
             //Display the factorial
             System.out.println(number + "! is " + fact);
             System.out.print("Enter an integer to find the factorial: ");
            }
         catch(NumberFormatException e){
            System.out.println("Invalid input please enter integers only");
            }
        }
  }  

此外,您的阶乘功能目前还存在编译问题。您需要修复它以使代码正常运行。

答案 3 :(得分:0)

我使用Java的递归因子的解决方案

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.*;
import java.util.*;

class Main {
    public static String factorial(int n,String s){
        if(n>0){
            BigInteger fact = new BigInteger(s);
            fact = fact.multiply(new BigInteger(n + ""));
            return factorial(n-1,fact.toString());
        }
        else{
            return s.toString();
        }
    }

    public static void main(String args[] ) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
            int n = Integer.parseInt(line);
            if(n==0)
            System.out.println("Factorial is 0");
            else{
            String s = factorial(n,"1");
            System.out.println("Factorial is " + s);
            }
    }
}