递归调用求1!+2!+3!...Java详解

import java.util.Scanner ;
public class Test1{
/********************阶乘的方法定义****************************/
	public static double jiecheng ( int a ) {//如果阶乘数太大,long也装不下,所以用double
	  if ( a==0 || a==1 ){//递归调用条件1:必须有结束条件if语句
	    return 1.0 ;
}
	  return  a*jiecheng(a-1)  ;/*递归调用条件2:每次调用都要改变形参内容(形参朝向结束条件的方向递减)*/
}
/********************阶乘的方法定义****************************/


/********************求和的方法定义****************************/
	public static double sum ( int b ){//如果阶乘数太大,long也装不下,所以用double
	  if( b==1 ){ //递归调用条件1:必须有结束条件if语句
	    return jiecheng(1) ;
}
	    return  jiecheng(b) + sum(b-1)  ;/*递归调用条件2:每次调用都要改变形参内容(形参朝向结束条件的方向递减)*/
}

/********************求和的方法定义****************************/

  public static void main ( String [ ] args) {
	Scanner scan = new Scanner(System.in) ;
	System.out.println("输入一个数,返回遍历阶乘和") ;
	int x = scan.nextInt() ;
	System.out.println("总和为" + sum(x)) ;
}
}

运行结果这个运算结果就超过的long的范围

 总结:

一丶递归调用必须满足两个条件:1.有结束条件if语句    2.每次调用的时候都根据需要改变传递的参数内容

二丶在递归方法的定义中,尽量return一个数,而不是return一个System.out.println();的结果,

因为前者更灵活,根据需求可以有更多的搭配组合

例如:

我定义了void递归方法A,没有return,把结果用print输出。

我又定义了double递归方法B,我在B中反复用到了A,如果A没有返回值,递归B则不可用


版权声明:本文为m0_56079407原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。