零星递归收纳

本文探讨了递归问题的核心思想,通过实例解析如汉诺塔、全排列等问题的解决策略。文章介绍了递归的基本概念,如何将复杂问题分解为更简单的子问题,并详细解释了几种典型的递归应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归问题经常的想法是转化为子问题,即拿出一个最简单的情况,看剩下n-1的情况如何变化。如求二叉树的叶子,转为左子树+右子树
1. 汉诺塔 及逆序输出
2. 全排列     每次选取后面的一位与自己交换,自己也传递下去
    c(n,m)=c(n-1,m-1)+c(n-1,m)
    任意选择n中的某个备选元素为特殊元素,从n中选m个元素可以由此特殊元素的分成两类情况,即m个被选择元素包含了特殊元素和m个
    被选择 元素不包含该特殊元素
3. 分苹果
    将m个放入n-1个中,m-n放入n个中(一次情况遍历)
4. 幂方分解
5. 借助栈实现非递归
6. 一次情况遍历,回溯法
7. 用递归避免手写多层循环,可变循环次数
8. 立足现在,把问题分解,明确最简单的情况,eg:概率问题,(蓝桥杯)
    车票问题,一直从(m-1,n)与(m,n-1)再添加一个与(m,n)是否相同来思考。但是递归问题是 明确把问题分为简易状态(首位0/1)最简单的情况与后面的合并与从后面推出相对应

明确每个递归点的状态描述为 什么,最好状态为此点


  
实际在于压栈,出栈,访问几个环节的条件与配合
递归分为前置与后置,以操作,递归的先后区分。划分子问题并利用返回值
这个原来是斐波那契数数列,的迭代。
程序设计在线导引
核心思想是将问题规模变小(1. 记录走的路程,利用depth;2. 利用返回值,归结为子部分与本结果的整合)
return max(h1,h2)+1;   return f(n-1)+f(n-2)+1;//  对可能的情况做一次枚举
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值