递归

递归

To Iterate is Human, to Recurse, Divine

递归的定义

递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法

递归的三三要素

1.明确的函数要干什么
2.明确终止条件
3.提取重复逻辑,去找等价关系

递归思想的精髓

递归:递是传递传递的意思,参数需要传递到下一层去,如果把递归形容成用要是打开一扇一扇的门的话,传递的就是钥匙;
归有归还的意思,打开所有的门需要把最终的目的归还到问题开始的地方。递归的精髓是对问题的解读,需要抽象出重复的
问题和现象,通过反复的调用将结果返回。

递归的经典例子

1.阶乘

f(int n){
    if(n==1)return 1;
    return n*f(n-1);
}

2.斐波那契数列

f(int n){
    if(n==1||n==2){
        return 1;
    }
    return f(n-1)+f(n-2);
}

3.杨辉三角

f(int x,iny){
    if(y<=x&&y>=0){
        if(y==0||y==x){
            return 1;
        }else{
            return f(x-1,y-1)+f(x-1,y);
        }
    }
    return -1;
}

4.汉诺塔问题

f(int level,String begin,String end){
    if(level==1){
        //结束
    }else{
        //倒数第二层移到b
        f(level-1,a,b);
        //再从b移到c
        f(level-1,b,c)
    }
}

5.二叉树深度

f(Tree t){
    if(t==null){
        return 0;
    }
    int left=f(t.left);
    int right=f(t.right);
    return left>right?left+1:right+1;
}

递归的优化算法

1.考虑重复计算的问题
2.考虑尾递归

你可能感兴趣的:(递归)