我试图通过使用递归来计算方法factorialRecursive中输入的factorial,但是我不能在该方法中声明任何变量或对象,这就是我正在努力的方法,我的尝试已经在方法中但是没有'工作。这必须在While循环中调用自身而不是for循环。
class Factorial{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int number;
do {
System.out.print("Enter a positive number: ");
number = input.nextInt();
} while (number < 0);
System.out.println(number + "! = " + factorialIterative(number) + " (iterative)");
System.out.println(number + "! = " + factorialRecursive(number) + " (recursive)");
}
private static int factorialIterative(int num) {
int result = 1;
while (num > 0) {
result = num*result;
num--;
}
return result;
}
private static int factorialRecursive(int num){
if (num==1 | num==0)
return 1;
return num*(num-1) * num;
}
}
答案 0 :(得分:2)
试试这个:
private static int factorialRecursive(int num) {
// Warning here use || instead of |
if (num==1 || num==0)
return 1;
return num * factorialRecursive(num - 1);
}
我也可以像这样简化:
private static int factorialRecursive(int num) {
return (num == 1 || num == 0) ? 1 : num * factorialRecursive(num - 1);
}
答案 1 :(得分:1)
您不需要声明任何变量。利用阶乘的递归关系:
N! = n *(n - 1)!
通过传递num
进行递归调用的结果乘以num - 1
。返回该产品而不将其存储在变量中。
答案 2 :(得分:-1)
递归意味着您需要在方法
中调用方法本身private static int factorialRecursive(int num){
if (num==1 | num==0)
return 1;
return num*factorialRecursive(num-1);
}
并且因为factorial将在低值时增加得非常高,考虑使用除整数之外的其他数据类型...否则只有在使用整数后才能获得无效数据的阶乘(16)...
private static long factorialRecursive(long num){
if (num==1 | num==0)
return 1;
return num*factorialRecursive(num-1);
}