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

递推(C语言)

文章目录

  • 1.斐波那契数列
  • 2.太波那契数列
  • 3.二维递推问题
  • 4.实战
    • 4.1 力扣509 斐波那契数
    • 4.2 力扣70 爬楼梯
    • 4.3 力扣119 杨辉三角||

递推最通俗的理解就是数列,递推和数列的关系就好比 算法 和 数据结构 的关系,数列有点
像数据结构中的线性表(可以是顺序表,也可以是链表,一般情况下是顺序表),而递推就是一
个循环或者迭代的枚举过程。
递推本质上是数学问题,所以有同学问算法是不是需要数学非常好,也并不是,你会发现
这些数学只不过是初中高中我们学烂的东西,高考都经历了,这些东西又何足为惧!?

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.斐波那契数列2.太波那契数列3.二维递推问题4.实战4.1 力扣509 斐波那契数4.2 力扣70 爬楼梯4.3 力扣119 杨辉三角|| 递推最通俗的理解就是数列&#xff0c;递推和数列的关系就好比 算法 和 数据结构 的关系&#xff0c;数列有点 像数据结构中的线性表(可以是顺序表&…...

安卓微信8.0之后如何利用缓存找回的三天之前不可见的朋友圈图片

安卓微信8.0之后如何利用缓存找回的三天之前不可见的朋友圈图片 复习了下安卓程序的知识&#xff0c;我们会了解到&#xff0c;安卓程序清楚数据的时候有两个选项 一个是清除全部数据一个是清除缓存。 清除全部数据表示清除应用数据缓存。 对于安卓微信8.0之后而言&#xff0…...

ES6 Class(类) 总结(九)

ES6 中的 class 是一种面向对象编程的语法糖&#xff0c;提供了一种简洁的方式来定义对象的结构和行为。 JavaScript 语言中&#xff0c;生成实例对象的传统方法是通过构造函数。下面是一个例子。 function Point(x, y) {this.x x;this.y y; } Point.prototype.toString fu…...

使用 Vue.js 和 Element Plus 实现自动完成搜索功能

使用 Vue.js 和 Element Plus 实现自动完成搜索功能 一、前言1.环境准备2.组件配置3.后端数据请求4.样式5.总结 一、前言 在前端开发中&#xff0c;实现自动完成&#xff08;autocomplete&#xff09;功能可以极大地提升用户体验&#xff0c;特别是在需要用户输入和选择内容的…...

SpringBoot自定义starter

SpringBoot自定义starter 1、SpringBoot之starter机制 1.1、什么是自定义starter ​ SpringBoot中的starter是一种非常重要的机制(自动化配置)&#xff0c;能够抛弃以前繁杂的配置&#xff0c;将其统一集成进starter&#xff0c;应用者只需要在maven中引入starter依赖&#…...

深入探索大语言模型

深入探索大语言模型 引言 大语言模型&#xff08;LLM&#xff09;是现代人工智能领域中最为重要的突破之一。这些模型在自然语言处理&#xff08;NLP&#xff09;任务中展示了惊人的能力&#xff0c;从文本生成到问答系统&#xff0c;无所不包。本文将从多个角度全面介绍大语…...

querylist多线程采集curlMulti时,报错Curl error(60)

前言 在使用querylist多线程采集的时候&#xff0c;报错: Curl error(60)。测试了下用http时没有问题&#xff0c;https时有问题。其原因在于多线程采集库引用的另一个库有问题。需要手动更改。 解决 找到&#xff1a;vendor/ares333/php-curl/src/Curl.php 文件&#xff0c…...

Python数据分析~~美食排行榜

目录 1.模块的导入和路径的选择 2.访问前面五行数据 3.按照条件进行筛选 4.获取店铺评分里面的最高分 5.打印对应的店铺的名字 1.模块的导入和路径的选择 # 导入pandas模块&#xff0c;简称为pd import pandas as pd # 使用read_csv()函数 # TODO 读取路径"/Users/fe…...

Linux下解压.tar.gz文件

.tar.gz 是一种常用的压缩包格式&#xff0c;尤其在Unix、Linux以及macOS系统中非常普遍。这个格式结合了两种不同的功能&#xff1a; Tar (.tar): “Tar” 是“Tape Archive”的缩写&#xff0c;最初是为了将数据备份到磁带上而设计的。Tar命令可以将多个文件和目录打包成一个…...

【电商选品干货】差异化卖点要这样打造,80%商家却做不到

今天就给大家说说&#xff0c;如何去挖掘产品的差异化卖点&#xff1f;我们要找差异化卖点&#xff0c;就是因为我们的产品转化率不足&#xff0c;通常有下面几点原因&#xff1a; 1、产品差异化卖点不足&#xff0c;商家占比30% 2、流量和产品卖点不匹配&#xff0c;商家占比…...

LabVIEW比例压力控制阀自动测试系统

开发了一套基于LabVIEW编程和PLC控制的比例控制阀自动测试系统。该系统能够实现共轨管稳定的超高压供给&#xff0c;自动完成比例压力控制阀的耐久测试、流量滞环测试及压力-流量测试。该系统操作简便&#xff0c;具有高精度和高可靠性&#xff0c;完全满足企业对自动化测试的需…...

运营商认证API在Java、Python、PHP中的使用教程

随着数字化浪潮的推进&#xff0c;实名认证已深入我们生活的方方面面&#xff0c;从线上购物到电子资金转移&#xff0c;手机号已成为注册账号的主要凭证。然而&#xff0c;这也带来了身份验证的难题和手机号被盗用注册账号的风险。在信息爆炸的时代背景下&#xff0c;确保每个…...

用虚拟机,可以在x86的电脑上虚拟出arm的电脑吗

1.用虚拟机&#xff0c;可以在x86的电脑上虚拟出arm的电脑吗 是的&#xff0c;可以在x86的电脑上使用虚拟机技术虚拟出ARM架构的电脑。以下是通过虚拟机实现x86电脑上虚拟ARM电脑的几个关键步骤&#xff1a; 选择合适的虚拟化软件&#xff1a;通常&#xff0c;你可以使用如QE…...

富格林:可信观念摆脱暗箱陷阱

富格林指出&#xff0c;投资者产生的暗箱亏损多半是由于被不可信观念的迷惑影响&#xff0c;以为真的可以毫不费力就能赚钱&#xff0c;最后发现连交易的本金都打水漂了。事实上&#xff0c;投资市场并不像大家想得那么简单。要想安全实现交易成功&#xff0c;避免暗箱陷阱&…...

WEB前端01-HTML5基础(01)

一.WEB相关概念 软件架构 C/S: Client/Server &#xff08;客户端/服务器端&#xff09;&#xff1a;在用户本地有一个客户端程序&#xff0c;在远程有一个服务器端程序 优点&#xff1a;用户体验好 缺点&#xff1a;开发、安装&#xff0c;部署&#xff0c;维护麻烦 B/S: Br…...

JUC-常见方法与线程的状态

常见方法 start()与run() 主线程直接调用某个线程t1的run()方法&#xff0c;run方法也会执行&#xff0c;但是并不会启动新的线程&#xff0c;而是有主线程调用的run方法&#xff0c;必须使用start才能启动新线程&#xff0c;但是start只能调用一次。 sleep()与yield() sle…...

如果你酿的酒是黄色,说明肯定是 “糊锅”了。

刚刚酿出的酒一般都是清澈见底的&#xff0c;如果你酿的酒是黄色&#xff0c;说明肯定是 “糊锅”了。这样的酒不仅颜色是黄的&#xff0c;而且还能闻到一股特别浓厚的 焦糊味。 这样的酒&#xff0c;米酒小哥是非常非常熟悉的&#xff0c;因为刚开始学习酿酒的那段时 间&#…...

国漫推荐07

玄幻、奇幻 1.侠岚系列 《侠岚》&#xff08;第1至6季&#xff09; 《画江湖之侠岚》&#xff08;侠岚第7季&#xff09; 2.《斗破苍穹》 三十年河东&#xff0c;三十年河西&#xff0c;莫欺少年穷&#xff01; 3.《武动乾坤》&#xff08;第1至4季&#xff09; 4.《妖神记》…...

力扣刷题35.搜索查找位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…...

setContentView 流程

setContentView 流程 Activity -> setContentView 开发者设置入口PhoneWindow -> setContentView mWindow 在 attach 时初始化为 PhoneWindow&#xff0c;同时PhoneWindow也是Window唯一的实现类PhoneWindow -> installDecor 这一步的作用是 初始化DecorView, 把Deco…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...