import java.io.*;
public class Recursion
{
public static int factorial(int num)
{
if (num > 0)
if (num == 1 )
return num;
else
return ( num * factorial( num -1) );
}
public static void calculate(int num)
{
System.out.println("Test of factorial recursive:");
System.out.print("\n");
System.out.println(num + "的阶乘是:" + factorial(num));
}
public static void main(String [] args) throws IOException
{
System.out.println("请输入你要计算阶乘的数字");
String s;
InputStreamReader ir;
BufferedReader in;
ir=new InputStreamReader (System.in);
in=new BufferedReader(ir);
s=in.readLine();
calculate(num);
}
}

解决方案 »

  1.   

    改成下面的
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    public class Recursion
    {
    public static int factorial(int num)
    {
    if (num > 0)
    if (num == 1 )
    return num;
    else
    return ( num * factorial( num -1) );
            return 0;
    }
    public static void calculate(int num)
    {
    System.out.println("Test of factorial recursive:");
    System.out.print("\n");
    System.out.println(num + "的阶乘是:" + factorial(num));
    }
    public static void main(String [] args) throws IOException
    {
    System.out.println("请输入你要计算阶乘的数字");
    String s;
    InputStreamReader ir;
    BufferedReader in;
    ir=new InputStreamReader (System.in);
    in=new BufferedReader(ir);
    s=in.readLine();//这里可以追加对s的判断,判断它是不是数字
    int num = Integer.parseInt(s);
    calculate(num);
    }
    }
      

  2.   

    我发现2处错误1。  factorial()方法 ,其实并没有给出返回值2。  main方法中的 最后一个语句里面的参数  num , 是factorial()方法中的局部变量。
      

  3.   

    改成下面即可import java.io.*;
    public class Recursion
    {
    public static int factorial(int num)
    {
    if (num > 0)
    if (num == 1 )
    return num;
    else
    return ( num * factorial( num -1) );
                      return 1;
    }
    public static void calculate(int num)
    {
    System.out.println("Test of factorial recursive:");
    System.out.print("\n");
    System.out.println(num + "的阶乘是:" + factorial(num));
    }
    public static void main(String [] args) throws IOException
    {
    System.out.println("请输入你要计算阶乘的数字");
    String s;
    InputStreamReader ir;
    BufferedReader in;
    ir=new InputStreamReader (System.in);
    in=new BufferedReader(ir);
    s=in.readLine();
    calculate(Integer.parseInt(s));
    }
    }
      

  4.   

    改成下面即可import java.io.*;
    public class Recursion
    {
            public static int factorial(int num)
            {
                    if (num > 0)
                            if (num == 1 )
                                    return num;
                    else
                            return ( num * factorial( num -1) );
                    return 1;
            }
            public static void calculate(int num)
            {
                    System.out.println("Test of factorial recursive:");
                    System.out.print("\n");
                    System.out.println(num + "的阶乘是:" + factorial(num));
            }
            public static void main(String [] args) throws IOException
            {
                    System.out.println("请输入你要计算阶乘的数字");
                    String s;
                    InputStreamReader ir;
                    BufferedReader in;
                    ir=new InputStreamReader (System.in);
                    in=new BufferedReader(ir);
                    s=in.readLine();
                    calculate(Integer.parseInt(s));
            }
    }
      

  5.   


    修改过的程序
    import java.io.*;
     class Recursion{
    public static int factorial(int num){
    if (num > 0){
    if (num == 1 )
    return num;
    return ( num * factorial( num -1) );
    }
    return 0;
    }
    public static void calculate(int num){
    System.out.println("Test of factorial recursive:");
    System.out.print("\n");
    System.out.println(num + "的阶乘是:" + factorial(num));
    }
    public static void main(String [] args) throws IOException{
    System.out.println("请输入你要计算阶乘的数字");
    String s;
    InputStreamReader ir;
    BufferedReader in;
    ir=new InputStreamReader (System.in);
    in=new BufferedReader(ir);
    s=in.readLine();
    calculate(Integer.parseInt(s));
    }
    }
      

  6.   

    public static int factorial(int num)
    {
    if (num > 0)
    if (num == 1 )
    return num;
    else
    return ( num * factorial( num -1) );
    }当num不大于0呢?就没有返回数据了,但你的方法体要求返回int类型,所以就会出错,
    public static int factorial(int num)
    {
    if (num > 0)
    if (num == 1 )
    return num;
             else
        return ( num * factorial( num -1) );                  else
                          return num;
    }
    设计方法时一定要保正每条分支都会有返回结果才行。
    还有:
    public static void main(String [] args) throws IOException
    {
    System.out.println("请输入你要计算阶乘的数字");
    String s;
    InputStreamReader ir;
    BufferedReader in;
    ir=new InputStreamReader (System.in);
    in=new BufferedReader(ir);
    s=in.readLine();
    calculate(num);//这里有毛病,num从何处来?
    }
    可以改为这样:
    public static void main(String [] args) throws IOException
    {
    System.out.println("请输入你要计算阶乘的数字");
    String s;
    InputStreamReader ir;
    BufferedReader in;
    ir=new InputStreamReader (System.in);
    in=new BufferedReader(ir);
    s=in.readLine();
                      int num = Integer.parseInt(s);
               calculate(num);
    }
      

  7.   

    import java.io.*;
     class Recursion{
    public static int factorial(int num){
    if(num==0) 
                            return 1;
                       else if(num>0)
                            return num*factorial(num-1);
    }
    public static void calculate(int num){
    System.out.println("Test of factorial recursive:");
    System.out.print("\n");
    System.out.println(num + "的阶乘是:" + factorial(num));
    }
    public static void main(String [] args) throws IOException{
    System.out.println("请输入你要计算阶乘的数字");
    String s;
    InputStreamReader ir;
    BufferedReader in;
    ir=new InputStreamReader (System.in);
    in=new BufferedReader(ir);
    s=in.readLine();
    calculate(Integer.parseInt(s));
    }
    }
      

  8.   

    我觉得如果输入的数很大的时候,也会返回一个更大的数,int型类型的数肯定不行了,所以我觉得应该返回一个长整型数。可是,return语句除了能返回int和boolean类型的值外,能不能返回其它的类型值啊??import java.io.*;
    class Recursion{
    public static int factorial(int num){


    if (num > 0)
    {
                                  if (num == 1 )
    return num;
               else
             {
                                   long a = num * factorial(num -1); 
          return (a);
                                  }
    }
             else
               return num;
    }
    public static void calculate(int num){
    System.out.println("Test of factorial recursive:");
    System.out.print("\n");
    System.out.println(num + "µÄ½×³ËÊÇ£º" + factorial(num));
    }
    public static void main(String [] args) throws IOException{
    System.out.println("ÇëÊäÈëÄãÒª¼ÆËã½×³ËµÄÊý×Ö");
    String s;
    InputStreamReader ir;
    BufferedReader in;
    ir=new InputStreamReader (System.in);
    in=new BufferedReader(ir);
    s=in.readLine();
    calculate(Integer.parseInt(s));
    }
    }