递归实现 N!=N*(N-1)*(N-2)*(N-3)*(N-4)*......*3*2*1希望可以讲解下递归实现是应该如何去用递归!!!使用比较重要
解决方案 »
- 刚笔试完的题目
- 奇怪的styleClass???
- [log4j]按天滚动log文件,如何使当天的log文件达到一定size后再滚动文件?(即DailyRollingFileAppender和RollingFileAppender混合的效果)
- 大虾们,为什么这个程序不能运行(线程方面的)?如何修改啊?
- struts2怎么样才能把session的map里面有些类怎么现实在jsp页面
- 请讲 -- 有方法可以获得传入的字串的编码格式吗?
- 帮帮我,我刚开看JAVA
- JDBC 可否支持执行语句块?
- java.io.* 里面的file 如何分目录还是文件
- 请问如何安装jdbc驱动?
- sessionFactory的问题
- 讨论,下面的一段代码会产生死锁吗?
public class Test{
public static void main(String[] args){
int n = 5;
int result = factorial(n);
System.out.println(result);
} public static int factorial(int n){
if(n <= 0){
System.out.println("Error input!");
return 0;
}
if(n == 1){
return n;
}else{
return n * factorial(n -1);
}
}
}
public static void main(String[] args){
int n = 0;
int result = factorial(n);
System.out.println(result);
} public static int factorial(int n){
if(n < 0){
System.out.println("Error input!");
return 0;
}
if(n == 0 || n ==1){
return 1;
}else{
return n * factorial(n -1);
}
}
}
2楼有点遗漏,改下,每次都比上次更靠近目标,最终需要结束。
就可以得到
f(N) = N * f(N-1),依此类推下去就可以得到递归方法了
那么f(N)的递归结束条件自然就是f(1) 和 f(0) = 1,所以就可以写出这个方法public static long factorial(int n)
{
if (n <=1 ) return 1;
return n * factorial(n-1);
}
跟上面二楼的代码没有太大区别,加上n < 0 的判断只是为了让程序更健壮、可靠对于返回值,int显然是不够的,long其实也不够,最好要用到BigInteger,你可以试试100!。