个人技术分享

什么是方法递归?

*递归是一种算法,在程序设计语言中广泛应用。
从形式上说:方法调用自身的形式称为方法递归(recursion)。


递归的形式


*直接递归:方法自己调用自己。
*间接递归:方法调用其他方法,其他方法又回调方法自己。

使用方法递归时需要注意的问题: 


递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。

递归算法三要素: 


递归的公式:f(n)=f(n-1)*n; 
递归的终结点:f(1) 
递归的方向必须走向终结点: 
f(5)=f(4)*5                 
f(4)=f(3)*4                 
f(3)=f(2)*3 
f(2)=f(1)*2 
f(1)=1

public class DiGuiAnLi {
    public static void main(String[] args) {
        //计算n的阶乘
        System.out.println(jiecheng(4));

    }
    public static int jiecheng(int n){
        if (n == 1) {
        return 1;
        }else{
            return jiecheng(n-1)*n;
        }
    }
}
public class DiGuiQIUHE {
    //求1-n的和
    public static void main(String[] args) {
        System.out.println(sum(3));
    }
    public static int sum(int n){
        if (n==1){
            return 1;
        }else{
            return n+sum(n-1);
        }
    }
}

案例猴子吃桃问题


·猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个第二天又吃了前天剩余桃子数量的半,觉得好不过瘾,于是又多吃了一个,以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第10天的时候发现桃子只有1个了。需求:请问猴子第-天摘了多少个桃子?

public class DiGuiTaoZi {
    public static void main(String[] args) {
        /**
         * 案例猴子吃桃问题
         * ·猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个第二天又吃了前天剩余桃子数量的半,觉得好不过瘾,
         * 于是又多吃了一个,以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个等到第10天的时候发现桃子只有1个了。
         * 需求:请问猴子第-天摘了多少个桃子?
         * f(10)=1
         * f(9)=(f(10)+1)*2
         *f(n-1)=(f(n)+1)*2
         * f(1)=(f(2)+1)*2
         * ...
         * f(8)=(f(9)+1)*2
         * f(9)=(f(10)+1)*2
         * f(10)=1
         */
        System.out.println(tiaozi(1));
    }
    public static int  tiaozi(int n) {
        if (n==10){
            return 1;
        }else{
            return (tiaozi(n+1)+1)*2;
        }
    }
}