递归
-
A方法调用B方法,我们很容易理解!
-
递归就是: A方法调用A方法!就是自己调用自己
-
利用递归可以用简单的程序来解决一些复 杂的问题。它通常把一个大型复杂的问题层层转化为
一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所
需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象
的无限集合。递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。如果没有头,将陷入死循环。
- 递归体:什么时候需要调用自身方法。
package com.qh.exercisefor;
public class DiGui {
public static void main(String[] args) {
DiGui diGui = new DiGui();
diGui.f(5);
}
//递归
//递归 会占用大量的空间内存,当n=1000,可能内存就不足了
//5! 5*4*3*2*1
public int f(int n){
if (n == 1){ //边界条件
//当n == 1 时,就都有了返回值,就层层返回
return 1;
}else{
/*
递归理解:
当f(5)进到这里的时候,f(5)还没有执行完就调用了f(4),f(5)需要等待f(4)执行完才开始执行自己未执行完的程序
当f(4)进来的时候,也会调用f(3),此时f(4)还没有执行完,需要等待f(3)执行完才会执行自己未执行完的程序
当循环到 n==1时,即f(1)时满足递归结束的条件,即return 1,表示f(1)执行完毕,
接下来执行f(2)未执行的完的内容,即 return 2 + f(1),而f(1)已经返回 1,因此 f(2)返回 return 2+1=3;
f(2)执行完毕,执行f(3)未执行完毕的内容,以此类推.....直到f(4)执行完毕后,执行f(5)未执行的内容
至此,执行完毕,返回值;
*/
return n*f(n-1);
}
}
}
推荐一个java学习视频,从基础到框架 java