递归及相关算法题

1、什么是递归

  递归是指在函数的定义中又调用自身的方法。若p函数定义又调用p函数,那么就可以称之为递归。

  用递归处理问题需要满足的三个条件:

    1、一个问题的解可以分为几个子问题的解。

    2、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样。、

    3、存在终止条件。

2、递归相关算法题详解

  a、(LeetCode70)爬楼梯

  链接:https://leetcode.cn/problems/climbing-stairs/

  题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

  思考:当n=1时,有1种方法,当n=2时,有2种方法(一节一节走或者一次走两节),当n>=3时,第一次可以先走一节或者先走两节,之后以此类推,即f(n)=f(n-1)+f(n-2),直到剩下的台阶数为一节或者两节,也就是递归出口。

  代码实现:

 1 class Solution {
 2     private Map<Integer,Integer> store = new HashMap<>();
 3     public int climbStairs(int n) {
 4         if(n == 1)return 1;
 5         if(n == 2)return 2;
 6         if(store.get(n) != null){
 7             return store.get(n);
 8         }else{
 9             int result = climbStairs(n-1)+climbStairs(n-2);
10             store.put(n,result);
11             return result;
12         }
13     }
14 }

  b、(剑指offer10)斐波那契数列

  链接:https://leetcode.cn/problems/fei-bo-na-qi-shu-lie-lcof/

  题目:写一个函数,输入n,秋斐波那契数列的第n项。斐波那契数列的定义如下:

 

 

  思考:当n=0时,输出0,当n=1时,输出1.当n大于等于2时,需要用前两个函数项的值相加得到。

  代码实现:

class Solution {
    private Map<Integer,Integer> store = new HashMap<>();
    public int climbStairs(int n) {
        if(n == 0)return 0;
        if(n == 1)return 1;
        if(store.get(n) != null){
            return store.get(n);
        }else{
            int result = climbStairs(n-1)+climbStairs(n-2);
            store.put(n,result);
            return result;
        }
    }
}

 

posted @ 2022-06-16 21:38  小向阳最优秀  阅读(190)  评论(0)    收藏  举报