递归:方法定义中调用方法本身的现象。(体现拆分合并的思想)
注意事项:1.递归要有出口,否则就是死递归,会造成栈溢出(StackOver)
2.递归次数不能太多,否则会有栈溢出的风险。。 例子:斐波那契数列
public class RecursiveDemo { //斐波那契数列递归写法 long F(int n){ if(n<=1) return n; return F(n-1)+F(n-2); } //斐波那契数列递推写法 long F1(int n){ if(n<=1) return n; long fn=0; long fn_1=1; long fn_2=0; for (int i=2;i<=n;i++){ fn=fn_1+fn_2; fn_2=fn_1; fn_1=fn; } return fn; } }
5的阶乘
public static void main(String[] args) { DiGui a = new DiGui(); System.out.println(a.jc(5)); } public int jc(int i){ if(i==1){ return 1; }else{ return i*jc(i-1);//此处写成i--会栈溢出 } }