递推最通俗的理解就是数列,递推和数列的关系就好比 算法 和 数据结构 的关系,数列有点

像数据结构中的线性表(可以是顺序表,也可以是链表,一般情况下是顺序表),而递推就是一

个循环或者迭代的枚举过程。

递推本质上是数学问题,所以有同学问算法是不是需要数学非常好,也并不是,你会发现

这些数学只不过是初中高中我们学烂的东西,高考都经历了,这些东西又何足为惧!?

1.斐波那契数列

斐波那契数(通常用F(n)表示)形成的序列称为 斐波那契数列 。该数列由0和1开始,后面
的每一项数字都是前面两项数字的和。也就是:

F(0)=0,F(1)=1
F(n)=F(n -1)+ F(n- 2),其中n>1,给定n(0 ≤n≤ 30),请计算 F(n)

拿到这个题目,我们首先来看题目范围,最多不超过 30,那是因为斐波那契数的增长速度很
快,是指数级别的。所以如果n 很大,就会超过 c语言 中32位整型的范围。这是一个最基础的递
推题,递推公式都已经告诉你了,我们要做的就是利用一个循环来实现这个递推。
我们只需要用一个 F[31]数组,初始化好 F[0]和 F[1],然后按照给定的公式循环计算就可以。

int febonacci(int n) {
int F[30] = {0,1};
for (int i = 2; i < 30; i++) {
F[i] = F[i - 1] + F[i - 2];
}
return F[29]
}

2.太波那契数列

泰波那契序列Tn定义如下:
T(0) = 0, T(1) = 1,T(2)=1
且在 n>2的条件下 T(n)=T(n-1)+T(n-2)+T(n-3),给你整数n,请返回第n个泰波那契
数T(n)的值。
如果已经理解斐波那契数列,那么这个问题也不难,只不过初始化的时候,需要初始化前三个数,
并且在循环迭代计算的时候,当前数的值需要前三个数的值累加和。像这样:

int tribonacci(int n) {
int F[30] = {0,1,1};
for (int i = 3; i < 30; i++) {
F[i] = F[i - 1] = F[i - 2] + F[i - 3];
}
return F[29];
}

3.二维递推问题

像斐波那契数列这种问题,是一个一维的数组来解决的,有些时候,一维解决不了的时候,我
们就需要升高一个维度来看问题了。

长度为n(1<n<40)的只由’A’、'C’、"M’三种字符组成的字符串(可以只有其中一种或两种字
但绝对不能有其他字符)且禁止出现 M 相邻的情况,问这样的串有多少种?

考虑长度为n,且以’A’ 结尾的串有f[n][0]种、以’C’ 结尾的串有f[n][1]种、以’’ 结尾的串有
f[n][2]种

4.实战

4.1 力扣509 斐波那契数

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。

int fib(int n){
if(n == 0){
return 0; }
else if (n == 1){
return 1; }
return fib(n - 1) + fib(n - 2);
}

4.2 力扣70 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

int climbStairs(int n) {
int f[46];
f[0] = 1;
f[1] = 1;
for(int i = 2; i <= n; i++){
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}

4.3 力扣119 杨辉三角||

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

int* getRow(int rowIndex, int* returnSize) {
int f[34][34];
for(int i = 0; i <= rowIndex; i++){
for(int j = 0; j <= i; j++){
if(j ==0 || j == i){
f[i][j] = 1;
}
else {
f[i][j] = f[i - 1][j] + f[i - 1][j - 1];
}
}
}
int* ret = (int *)malloc (sizeof(int) * (rowIndex + 1));
for(int j = 0; j <= rowIndex; j++){
ret[j] = f[rowIndex][j];
}
*returnSize = rowIndex + 1;
return ret;
}

递推(C语言)的更多相关文章

  1. C语言 分支与循环 递推思想 穷举 流程的转移控制

    条件语句 开关控制语句(SWITCH语句) 象坐电梯一样,break是按的楼层,不加break则会一直执行下去. 上面程序有细节BUG,边界测试输入-5,105时由于整除会得到错误的结果. 解决方法: ...

  2. 一步一步地完成题目——费解的开关(C/C++语言)递推、递归、顺序思维

    前言 本文中博主将一步一步地.以正常人的顺序思维完成题目--费解的开关,使用的核心方法是递推与递归. 题目 参考题目:费解的开关 详细的题目信息相信大家都已经知道了,因此这里为了简洁只展示输入输出格式 ...

  3. 斐波那契数列 递归 尾递归 递推 C++实现

    ==================================声明================================== 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本 ...

  4. Python—day17时间模块、系统模块、递推遍历、序列化

    一.time'''时间戳(timestamp):time.time()延迟线程的运行:time.sleep(secs)(指定时间戳下的)当前时区时间:time.localtime([secs])(指定 ...

  5. 再谈循环&迭代&回溯&递归&递推这些基本概念

    循环:不断重复进行某一运算.操作. 迭代:不断对前一旧值运算得到新值直到达到精度.一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算 递推:从初值 ...

  6. c++ 递推算法

    各位大佬不妨先点个赞再看文章! 递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法.这种算法特点是:一个问题的求解需一系列的计算,在已知条件和所求问题之 ...

  7. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  8. 从一道NOI练习题说递推和递归

    一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...

  9. Flags-Ural1225简单递推

    Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...

  10. 利用Cayley-Hamilton theorem 优化矩阵线性递推

    平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...

随机推荐

  1. Linux内核如何访问另外一个模块的函数和变量 原创

    一.问题整理 内核中两个模块,一个A,一个B,A模块中有操作函数,B模块要调用A模块的函数. 二.分析 这是一个驱动工程师经常遇到的一个问题,该问题其实是模块符号导出问题,实现该功能比较简单,借助EX ...

  2. ArcGIS创建渔网工具的使用方法

      本文介绍在ArcMap软件中,通过"Create Fishnet"工具创建渔网,从而获得指定大小的矢量格网数据的方法.   首先,我们在创建渔网前,需要指定渔网覆盖的范围.这里 ...

  3. Chrome扩展插件的开发--获取网页Cookies

    Chrome扩展插件的开发--获取网页Cookies Chrome浏览器在浏览器类应用软件中一直居于榜首,很多人选择Chrome浏览器不仅仅是因为它的稳定,还有它丰富的可拓展性.那么有没有想自己开发一 ...

  4. Android 获取当前获取焦点的组件

    在Activity中,使用this.getCurrentFocus(),获取当前焦点所在的View, 再判断是否是EditText(可调整成其他组件),看个人需要再做特定的逻辑处理 String co ...

  5. PyTorch从入门到放弃之张量模块

    目录 张量的数据类型 torch.rand()函数 torch.randn()函数 torch.normal()函数 torch.linspace()函数 torch.manual_seed()函数 ...

  6. CMake构建学习笔记14-依赖库管理工具

    如果说做C/C++开发最大的痛点是什么,那么一定是缺少一个官方的统一的包管理器.认真的说,如果你要用C/C++干点什么,至少需要(Windows系统下): C/C++语言本身.标准库.以及操作系统AP ...

  7. Go runtime 调度器精讲(四):运行 main goroutine

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 皇天不负有心人,终于我们到了运行 main goroutine 环节了.让我们走起来,看看一个 goroutine 到底是怎么运行的. 1. 运 ...

  8. JAVAEE——tomcat安装

    一.下载 1.网址:Tomcat官网 选择版本:点击左边Download下的which version,根据Supported Java Versions来选择合适的Tomcat版本 下载软件:点击左 ...

  9. 手搓大模型Task01:LLama3模型讲解

    前言   主要进行Qwen模型架构进行讲解. 1.Qwen整体介绍   Qwen的整体架构与Llama2类似,如下图所示: tokenizer将文本转为词表里面的数值. 数值经过embedding得到 ...

  10. word在原有的方框里打勾

    按住键盘上的ALT键不放,然后在小键盘区输入"9745"这几个数字,最后松开 ALT 键,自动变成框框中带勾符号.