递归及相关算法题
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; } } }

浙公网安备 33010602011771号