当前位置: 首页 > news >正文

数据结构和算法(0-1)----递归

定义​

  递归是一种在程序设计中常用的技术,它允许一个函数调用自身来解决问题。递归通常用于解决那些可以被分解为相似的子问题的问题,这些问题的解决方式具有自相似性。在数据结构和算法中,递归是一种重要的解决问题的方法,尤其是在处理树形结构和图结构时。

递归的基本概念

递归函数:一个函数直接或间接地调用自身。

基线条件:递归必须有一个或多个基线条件,以防止无限递归。基线条件通常是递归终止的简单情况。

递归步骤:递归函数调用自身时,每次调用都应该使问题更接近基线条件。

递归的工作原理

问题分解:将问题分解为更小的子问题。

递归调用:对每个子问题,递归函数调用自身。

合并结果:将子问题的解合并以形成原始问题的解。

基线条件:当问题规模足够小,可以直接解决时,停止递归。

简单例子

1. 阶乘计算

阶乘函数是一个经典的递归示例:

def factorial(n):if n == 0:  # 基线条件return 1else:return n * factorial(n-1)  # 递归调用

2. 斐波那契数列

斐波那契数列是另一个递归示例,其中每个数是前两个数的和:

题目:

爬楼梯. - 力扣(LeetCode)

思路:我们用 f(x) 表示爬到第 x 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子:

f(x)=f(x−1)+f(x−2)

它意味着爬到第 x 级台阶的方案数是爬到第 x−1 级台阶的方案数和爬到第 x−2 级台阶的方案数的和。很好理解,因为每次只能爬 1 级或 2 级,所以 f(x) 只能从 f(x−1) 和 f(x−2) 转移过来,而这里要统计方案总数,我们就需要对这两项的贡献求和。

c代码实现:

int F(int n)
{if(n<=2)return n;elsereturn F(n-1)+F(n-2);
}

python实现:

def F(n):if n <= 2:return nelse:return F(n - 1) + F(n - 2)

java 实现:

public class Fibonacci {public static int F(int n) {if (n <= 2) {return n;} else {return F(n - 1) + F(n - 2);}}public static void main(String[] args) {// 测试函数int number = 10; // 例如,计算第10个斐波那契数System.out.println("Fibonacci of " + number + " is " + F(number));}
}

js实现:

function F(n) {if (n <= 2) {return n;} else {return F(n - 1) + F(n - 2);}
}

关于此题的其他几个解法后续出!

知识星球:

https://articles.zsxq.com/id_xsfrtk2w9wp6.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ArduPilot开源代码之OpticalFlow_backend
  • arm64架构下源码编译安装kafka —— 筑梦之路
  • 【C++】———— 继承
  • 【Linux网络】IO模型{再识 IO/IO模型/阻塞IO vs 非阻塞IO/同步IO vs 异步IO}
  • LangChain内置函数全解析:深入探索与高效应用
  • iPhone 16 Pro系列将标配潜望镜头:已开始生产,支持5倍变焦
  • druid(德鲁伊)数据线程池连接MySQL数据库
  • 【ElasticSearch】ES 5.6.15 向量插件支持
  • 软件供应链安全:如何防范潜在的攻击?
  • 机器学习筑基篇,Jupyter Notebook 精简指南
  • Docker搭建kafka+zookeeper以及Springboot集成kafka快速入门
  • 暑假自律日记十二
  • 同步与异步:.NET 中的 Task.WaitAll 和 Task.WhenAll
  • SpringMVC框架--个人笔记步骤总结
  • 04.为什么line-height是无单位的 兄弟元素淡出效果 蚀刻文字效果
  • es6
  • JavaScript创建对象的四种方式
  • JavaScript的使用你知道几种?(上)
  • JAVA并发编程--1.基础概念
  • Python利用正则抓取网页内容保存到本地
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • TypeScript实现数据结构(一)栈,队列,链表
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • windows下mongoDB的环境配置
  • 从0实现一个tiny react(三)生命周期
  • 仿天猫超市收藏抛物线动画工具库
  • 开源SQL-on-Hadoop系统一览
  • 微信小程序开发问题汇总
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • UI设计初学者应该如何入门?
  • ​​​​​​​​​​​​​​Γ函数
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​ssh免密码登录设置及问题总结
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (二十六)Java 数据结构
  • (一)appium-desktop定位元素原理
  • .gitignore文件—git忽略文件
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 发展历程
  • .net 受管制代码
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET框架
  • .net连接MySQL的方法
  • .net中生成excel后调整宽度
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /dev/sda2 is mounted; will not make a filesystem here!