解析java中的方法的递归
解析java中的方法的递归
1.含义
自己调用自己
2.为什么要用?
用于有规律(数字之前)的数据的计算,例如求斐波那契数列
3.如何使用方法的递归
3.1 思路
a.先分析出所求题目的递归规律
a.1 具体就是先把数字的计算方法列出来
a.2 观察前后数据的变化(从前往后看,从后往前看)是否符合递归
a.3 后面得到的单个数据不符合递归规律,那么它就是递归的出口
b.根据递归公式进行return调用自身
c.设立递归出口,当到某个条件的时候,会返回一个具体的值,而不是再次去调用自身
3.2 使用原则
a.能用循环解决的问题就不要用递归,实在是其他办法实现不了再去使用递归
b.递归不要太深,因为调用方法的过程就是一个压栈的过程,栈的空间是有上限的,
一直压栈而不弹栈的话,那可能会递归到栈内存满了,然后提示StackOverflowError堆栈溢出异常
c.递归一定要有出口,不能无限调用,return关键字之结束方法在此无效
因为return关键字执行结束方法的功能都是在被void修饰的方法中,其余的有返回值的方法,均不可以使用return;来结束方法
3.3 示例题目
题目内容
求1+2+…+n之间的和
分析
f(4)=4+3+2+1
f(3)=3+2+1
f(2)=2+1
f(1)=1;
由上面的式子,我们不难发现:f(n)=n+f(n-1)(n>2时,f(1)=1)
因此.此题的递归规律为f(n)=n+f(n-1)(n>2时)
递归出口为n=1的情况,此时返回1即可
示例代码
import java.util.Scanner; public class Practice { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("请输入n的值"); int n=scanner.nextInt(); int result=sum(n); //进行输出格式的打印 for (int i = 1; i <=n; i++) { if(i==n){ System.out.print(i+"="); //加到最后一个数时,后面的符号是等号 }else{ System.out.print(i+"+"); } } System.out.print(result); } public static int sum(int n){ //递归的出口 if(n==1){ return 1; } //递归公式 return n+sum(n-1); } }