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版权协议,转载请附上原文出处链接和本声明。