【发布时间】:2017-01-25 10:49:43
【问题描述】:
这是我的代码:
使用递归查找阶乘对更大的数字不起作用
import java.util.*;
import java.lang.*;
class Main
{
static String fib(int f)
{
if(f!=1)
return ""+(f*(Integer.parseInt(fib(f-1))));
else
return "1";
}
public static void main(String[] args) throws java.lang.Exception
{
Scanner sc= new Scanner(System.in);
int f= sc.nextInt();
int a[]=new int[f];
int i;
for( i=0;i<f;i++)
a[i]=sc.nextInt();
for( i=0;i<f;i++)
System.out.println(fib(a[i]));
}
}
【问题讨论】:
-
究竟是什么不工作?请注意,阶乘变得非常大并且很容易超出整数范围。改用双打。此外,您的代码可能运行非常缓慢。你为什么要返回字符串?只需按原样返回数字!
-
您要达到多大的数字?在为大量生成阶乘时,这也是关于存储和实现逻辑的全部内容
-
对于 50 大的数字,我没有得到正确的输出。它适用于较小的数字。我返回 String 是因为阶乘可能非常大,并且输出可能超出 int 或 long 的范围。
-
当你接下来做
Integer.parseInt(fib(f-1))时使用String并没有真正帮助,试图将String转换为int,这将失败,因为数字太大了一个整数。 -
您的代码显示
0对应于0!,这是错误的。0! = 1.
标签: java