递归及相关算法题

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; } } }

 


__EOF__

本文作者向阳最优秀
本文链接https://www.cnblogs.com/xiangyangboke/p/16383668.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小向阳最优秀  阅读(182)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏