递归执行以及递归在解决跳台阶、变态跳台阶中的运用

跳台阶问题 + 变态跳台阶问题 解法(动态规划递归 + 非递归) 一、跳台阶问题 题目描述: 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。 通过题目的描述,可以很清晰地看到,这就是一个Fibonacci数列。 递归实现: unsigned long long solution(int stageNum) { //定义递归出口 if(stageNum <= 0) re 阅读详情

        所谓递归,就是程序中不断地调用自身最后解决问题的一种方式。每次递归都需要内存空间储存变量,因此递归需要注意其层次(递归条件),如果递归层数多到一定程度就会发生内存不足的情况,同时递归必须存在跳出条件否则将使整个程序陷入无限循环。

        通俗讲,递归就是把一个大的问题不断地缩小,直到能够在一定范围简单得到结果,然后再反向计算。可以将整个递归过程想象成一组俄罗斯套娃游戏。在这组套娃上,每一层套娃都写着“值为里面一层的2倍”,在这种情况下,单从外面根本无法求解,这时候就需要依次将套娃取出,得到里面一层的信息,一直重复。这时候前面提到的跳出条件就变得格外重要,如果没有这个跳出条件程序就会一直往下一层寻找,直到内存不足崩溃。跳出条件其实就是指最里面的一个套娃中必须有一个确定的数字。

按要求,最右边的小套娃必须是确定的值。例如n的求阶乘,这个问题中存在隐形的跳出条件--n==1时,1的阶乘等于1。在计算时f(n)=n*f(n-1);即如果我们知道n-1的阶乘,乘以n就得到n的阶乘....要想知道n=2阶乘则必须知道n==1的阶乘,n==1阶乘条件给出,反过来得出f(2),f(3)..........f(n-1),f(n);

        阶乘的每层都会压栈,可以想象算法的压栈过程,求f(n),程序首先将f(n)压栈,为了求f(n)则要先求f(n-1),此时f(n-1)压栈,如此循环,栈最上层为f(1)(跳出条件),得到确定值(跳出条件)则弹出f(1)得到f(2),弹出f(2)得到f(3).......弹出f(n-1)得到f(n).

int recursive(int val)
{
    if (val == 1)//跳出条件
        return val;
    return val*recursive(val - 1);
}

int main()
{
    int n;
    while (cin >> n)
    {
        int value = recursive(n);
        cout << "n!=" << value << endl;
    }
    return 0;
}

 

跳台阶问题:

一般跳台阶每次可以调一阶或者两阶,当有n阶时有多少种方案。

这个问题如果从第一阶开始考虑则很难得出结论,反向递归考虑则假设最后一跳刚好跳到第n阶,则最后一跳有两种情况:跳一阶和跳两阶,当跳一阶则之前刚好跳n-1阶,跳两阶则之前刚好跳n-2阶。f(n)=f(n-1)+f(n-2),得到了递归条件还需要跳出条件。该题中跳出条件有两个:第一次跳一次或者两次,f(1)=1,f(2)=2(两个一阶,一个两阶)

int recursive(int val)
{
    if (val <= 0)
        return 0;
    if (val == 1 || val == 2)
        return val;
    return recursive(val - 1) + recursive(val - 2);
}

int main()
{
    int n;
    while (cin >> n)
    {
        int value = recursive(n);
        cout << "f(n)=" << value << endl;
    }
    return 0;
}

 

变态跳台阶

变态跳台阶即一次可以跳任意阶。f(n)=f(n-1)+f(n-2)+......+f(n-(n-1))+f(n-n),由数学公式可以简化f(n)=2*f(n-1)

int recursive(int val)
{
    if (val <= 0)
        return 0;
    if (val == 1)
        return 1;
    
    return 2*recursive(val-1);
}

int main()
{
    int n;
    while (cin >> n)
    {
        int value = recursive(n);
        cout << "f(n)=" << value << endl;
    }
    return 0;
}

牛客网——跳台阶和变态跳台阶问题 1、跳台阶 题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种方法? 解答:这种问题一般是有规律的,跳1级台阶,只有1种方法;跳2级台阶,有2种方法;跳2级台阶,有3种方法;跳4级台阶,有5种方法,依次下去,跳一个n级的台阶的方法数是跳n-1级台阶的方法数与跳n-2阶台阶的方法数的总和。这种思路可以用逆推去想,要跳上一个n级台阶,可以从n-1 阅读详情

相关推荐

跳台阶问题(变态跳台阶)的解法

一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。        我们把n级台阶时的跳法看成是n的函数,记为f(n)。当n&gt;2时,第一次跳的时候就有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另外一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2)...

qq_42720630的博客 1033

C/C++学习(四)变态跳台阶

题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法 输入:输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1 输出: 对应每个测试案例,输出该青蛙跳上一个n级的台阶总共有多少种跳法。 分析:当台阶数为n时,可以分为以下步骤来完成: 设第一次跳的台阶数为s,跳台阶方式数为T,则: (1

阳仔的博客 955

医学图像中的小目标病灶检测难题:我的硕士研究总结与思考

医学图像中的小目标检测和分割,主要指在CT、MRI、超声等医学影像中识别和分割微小病灶或细小结构。这些小目标通常体积小、边界模糊、特征不明显,却往往是关键病灶,例如肺部小结节、脑微出血、乳腺微钙化等。

weixin_45638136的博客 2370

C++实现变态跳阶梯,一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

解题思路:同样写出依次递增的几个阶梯数及其跳法,可以发现其跳法呈等比数列,代码如下: class Solution { public: int jumpFloorII(int number) { if(number==0) return 0; else return (pow(2,number-1)); ...

Howe Tan 浪漫的季节的博客 800

雷达工程师避坑指南:STAP处理中,间歇采样转发干扰为什么这么难对付?

本文深入解析了STAP处理中间歇采样转发干扰(ISRJ)的挑战与应对策略。通过分析ISRJ的工作机制和自由度消耗问题,结合仿真数据对比,揭示了其与传统压制干扰的本质差异。文章还探讨了在工程实践中如何构建有效的防御体系,包括降维处理技术选择和混合架构设计,为雷达工程师提供了实用的避坑指南。

weixin_30530339的博客 271

【电子元件篇】MOSFET场效应管作用、选型和测量指南-超简单解读

场效应管是一种电压控制型半导体器件,相比三极管具有输入阻抗高、噪声小、功耗低等优势。主要分为结型和绝缘栅型两大类,后者又可分为耗尽型和增强型MOS管。场效应管通过栅极电压控制漏极电流,具有转移特性和输出特性两大静态特性,以及快速的开关特性。其关键参数包括饱和漏源电流、夹断电压、跨导等,应用场景涵盖信号放大、恒流源、阻抗变换等领域。使用时需根据电路需求选择合适类型,如结型管适合一般放大,功率MOSFET适合高压大电流场合。检测时可用万用表电阻档初步判断好坏和放大能力。

2301_81299416的博客 2542

【C语言】函数递归_跳台阶问题

C语言跳台阶问题汉诺塔问题函数递归和函数迭代实现

zhang2929259676的博客 1476

lvgl 9虚拟键盘控件 (lv_keyboard) 使用指南

是 LittlevGL 提供的一个虚拟键盘控件,适用于在图形界面中输入文本。与按钮矩阵类似,虚拟键盘预定义了多个键位布局,支持多种模式和自定义键位映射,能够满足各种文本输入需求。通过与文本区域 (Text Area) 的结合,键盘能够自动将输入的字符传送到指定区域。控件是 LittlevGL 提供的强大虚拟键盘解决方案,适用于任何需要文本输入的界面。通过预定义的键盘模式、自定义键位映射和文本区域自动填充功能,可以大大提升用户输入体验。无论是在嵌入式系统的用户界面中,还是在其他需要虚拟键盘的应用中,

m0_62599305的博客 2186

剑指offer-变态跳台阶(python和c++)

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 分析如下: f(1) = 1 f(2) = f(2-1) + f(2-2) //f(2-2) 表示2阶一次跳2阶的次数。 f(3) = f(3-1) + f(3-2) + f(3-3) … f(n) = f(n-1) + f(n-2) + f(n-3) + … ...

weixin_42784169的博客 198

【CicadaPlayer】av_rescale_q 学习:转换PTS和Duration

参考 av_rescale_q()理解 大神时间基准的总结: AVPacket下的pts和dts以AVStream->time_base为单位(数值比较大),时间间隔就是AVStream->time_base。 大神:多种转换的总结 av_rescale_q用于计算Packet的PTS 如: if (pkt->pts != AV_NOPTS_VALUE) { pkt->pts = av_rescale_q(pkt->pts, m

突围 842

数字游民产业小报告 · 2025

2025 年全球数字游民约(不同统计口径差异很大,低估法约 4,000 万,高估法 8,000 万),美国来源占比最高。:2025 Q1 约岗位允许一定程度远程;2024 年美国员工至少部分远程(全球 2023 年约 28%)。:到 2025 年,提供数字游民/远程工作签证(媒体口径 50–73 个不等;福布斯 66、Citizen Remote 50+、有机构清单称 73)。:以英国为例,期望未来一年全勤到岗、企业因强制返岗出现离职,说明“灵活/远程”仍是劳动力市场的筹码之一。

Anthony1453的博客 1469

【剑指offer】跳台阶问题 + 变态跳台阶问题 解法(动态规划递归 + 非递归) C++实现

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 通过题目的描述,可以很清晰地看到,这就是一个Fibonacci数列。 思路: a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法是f(n-1); b.假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2) c.由a\b假设可以得出总跳法为: f(n) = f(n-1) + f(n-2) d.然后通过实际的情况可以得出:只有一阶的时候 f(1) = 1 ,只有

Borrr的博客 780

【笔记】1.1 拉伸力-伸长(延伸)曲线和应力-应变曲线

过了B点后,由于颈缩导致的截面半径迅速减小,导致真应力迅速上升,切线斜率明显提高。假设试样原长为ε,在力的作用下伸长了dε,那么根据应变的定义,瞬时的应变为dε/ε,总的应变为瞬时应变的累计,假设在瞬时的条件下,试样受载荷变化量为 ΔF ,变化的截面积为 ΔA ,而且ΔA→0,那么瞬时的。由于原始的截面积和原始的标距长度为常数,故得到的曲线长相和拉伸力-伸长(延伸)曲线没啥区别。因为用的都是原始的截面积和原始的标距长度,故称为公称应力和公称应变。如果拉伸力→应力,伸长长度→应变,就会得到应力-应变曲线。

m0_73676887的博客 5273

【规律】跳台阶、变态跳台阶

1、跳台阶/矩形覆盖 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 这两个解法一致 思路分析 比较倾向于找规律的解法,f(1) = 1, f(2) = 2,...

永生只是一场幻梦 2975

Hermes接入IMA知识库全攻略:将知识库装进你的Hermes智能体

本文详细介绍了如何将IMA知识库功能接入Hermes Agent平台,实现一站式笔记管理和知识库操作。主要内容包括:获取IMA访问凭证、下载技能包、配置凭据(支持文件和环境变量两种方式)、验证配置有效性,以及实际应用演示(查询知识库列表、创建笔记并添加到知识库)。文章还提供了常见问题解决方案,如认证失败处理、版本更新等。通过该集成,用户可在Hermes中直接调用IMA的笔记创建、知识库管理等强大功能,提升工作效率。

小石头的专栏 641

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法

转载自:https://www.jb51.net/article/140446.htm 前言 跳台阶、变态跳台阶、矩形覆盖其实都和斐波那契数列是一类问题,文中通过示例代码介绍的非常详细,下面话不多说了,来一起看看详细的介绍吧。 跳台阶 问题描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 分析: 初始值很容易得到,当n > ...

qinglv1的博客 384

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

2、递归和循环——跳台阶和变态跳台阶(python版)

1、跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 青蛙跳台阶仅有两种方式,一阶跳和二阶跳。 我们把情况列出来,假设有n级台阶, 当青蛙一阶跳时,剩余的跳法还剩n-1种; 当青蛙二阶跳时,剩余的跳法还剩n-2种。 由数值特征,我们可以联想到是类似于斐波那契数列的情况: F(n) = F(n-1) + F(n...

STAR GAME 666

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

剑指Offer_编程题_跳台阶、变态跳台阶

跳台阶 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 AC代码 public class Solution { public int JumpFloor(int target) { if(target==1) return 1; else if(tar...

JY_WD的博客 8199

python输出台阶图案_Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法

前言跳台阶、变态跳台阶、矩形覆盖其实都和斐波那契数列是一类问题,文中通过示例代码介绍的非常详细,下面话不多说了,来一起看看详细的介绍吧。跳台阶问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:初始值很容易得到,当n > 2时,跳上n级台阶最后一步无外乎两种情况,从第n-1级跳一级跳上来,或是从第n-2级跳2级跳上来,因此很容易得到如下递...

weixin_39550172的博客 785

NewCoder:跳台阶、变态跳台阶

1.一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 2.一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

SNAYi 154

《剑指offer》——青蛙跳台阶/变态跳台阶

题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 class Solution { public: int jumpFloorII(int number) { int result[100] = {1,2}; if(number <= 2) { return result[number-1]; } else

SaBo‘s Blog 2483

跳台阶问题(变态跳台阶)

问题一:   若每次只能跳一节台阶或两节台阶,则n节台阶,有几种跳法?(按先后次序计算) 思路(从后往前考虑):   设发f(n)为n节台阶共有的跳法,若有1节台阶,则有1种跳法,两节台阶有两种跳法,3节台阶考虑最后一次跳两节,最后一次跳一节,则有f(3)=f(2)+f(1)…则n节台阶也是可分为最后一次跳两节,最后一次跳一节,则有f(n)=f(n-1)f(n-2) 代码实现: public cl...

qq_44786115的博客 856

剑指offer(三) 斐波那契数列+跳台阶+变态跳台阶

记录并复习一下剑指offer的部分题型~ 文章目录斐波那契数列跳台阶变态跳台阶 斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n<=39 斐波那契数列是指一个:1,1,2,3,5,8,13,21,34…的数列,这个数列从第三个数开始等于前两个数之和。 题目中要求从0开始,第0项是0,第1项是1,那么我们可以通过递归来计算。 public class Solution { public int Fi

LinJy 432

跳台阶 & 变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 变态跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。   分析思路 先来看跳台阶: 青蛙最后一次跳到第n级台阶有几种情况?只有两种可能: 1.从第n-1级台阶一次跳1级跳到第n级台阶 ...

qq_36456827的博客 259

python print 台阶_Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法

Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法发布时间:2020-08-20 18:01:02来源:脚本之家阅读:94作者:大师兄前言跳台阶、变态跳台阶、矩形覆盖其实都和斐波那契数列是一类问题,文中通过示例代码介绍的非常详细,下面话不多说了,来一起看看详细的介绍吧。跳台阶问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析:初始值很容易...

weixin_39830303的博客 176

斐波那契数列 && 青蛙跳台阶 && 变态跳台阶

目录 一、斐波那契数列 二、青蛙跳台阶问题 三、变态跳台阶 一、斐波那契数列 题目:写一个函数,输入n,求斐波那契数列的第n项。 思路:用递归的方法,f(n) =f(n-1) + f(n-2)。代码比较简单。 #include<iostream> using namespace std; int Fibonacci(int n) { if(n <= 0) {...

weixin_42422557的博客 304
上一篇: openCV Mat深拷贝和浅拷贝以及在ROI中用指针输出图像和ROI图像不同
下一篇: c++中const int* p(p指向的值并不是一定不可修改)和int * const p的理解
Lewispu
博客等级 码龄14年 8粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值