递归:因子

时间:2016-07-08 02:32:59

标签: java recursion

public class Factorial {

    int fact (int n) {

        int result; 

        if (n==1 ||n==0) 
            return 1;

        else 
            result = n*fact(n-1);
        return result;
    }

假设n小于0(-1,-2等)且这些值的阶乘值为“无效”(如果输入值(n)为,则我希望系统打印出“无效”小于0.如何修改代码。我理解该方法只返回一个整数值,而不是String。

3 个答案:

答案 0 :(得分:1)

只需添加if语句检查否定输入。因子不应该返回负数,因此您可以返回-1来指示错误:

int fact (int n) {
    if (n < 0) {
        return -1;
    }

    if (n==1 || n==0) {
        return 1;
    }
    else {
        return n * fact(n-1);
    }
}

答案 1 :(得分:1)

正如@Saravana所说,你必须添加一个看起来像这样的throws语句:

    int factorial (int n) 
    {
        if (n < 0) 
        {
            throw new IllegalArgumentException("Sorry value cannot be negative");
        }

        if (n==1 || n==0) 
        {
            return 1;
        }
        else 
        {
            return n * fact(n-1);
        }
    }

如果任何小于零的值,则会出现错误,指出用户没有输入正确的值。希望这有帮助! :)

答案 2 :(得分:1)

  

我希望系统打印出来&#34;无效&#34;如果输入值(n)小于0

您可以通过添加

来完成此操作
if (n < 0) {
    System.out.println("Not valid");
}

在方法的开头。字符串&#34;无效&#34;该方法不会退回,但会打印出来。
之后,退出该方法而无需进一步计算将是有意义的。您可以通过以下任一方式根据您的需要执行此操作:

如果您的程序可以执行更多操作,那么只需计算一个因子,并且在任何情况下都需要返回值:

 if (n < 0) {
     System.out.println("Not valid");
     return -1; // or some other inapplicable for a factorial result integer value
 }

或者你也可以&#34;艰难退出&#34;整个程序whitout返回任何值,如

if (n < 0) {
     System.out.println("Not valid");
     System.exit(1); // 1 or any other nonzero integer value 
                     // to tell the system it exits with an error. 0 otherwise
 }