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

递归优化:斐波那契数列的记忆化求解(C语言)

编写自定义的递归函数,实现求解斐波那契数列。
由用户输入要求解的第n项的编号,n,输出f(n)即第n项的值。 例如F(5)=5

#include <stdio.h>
long long memo[100] = {0};
long long F_mem(int n)
{
if (n <= 0) return -1;
if (n == 1 || n == 2) return 1;

if (memo[n] != 0) return memo[n];

memo[n] = F_mem(n - 1) + F_mem(n - 2);
return memo[n];
}
int main()
{
int n;
printf("请输入第n项:\n");
scanf("%d", &n);

if (n <= 0)
{
printf("n 必须大于 0\n");
return 1;
}

printf("斐波那契数列第%d项:%lld\n", n, F_mem(n));
return 0;
}

这段代码是斐波那契数列计算的优化版本,采用了记忆化递归

什么是记忆化?
记忆化是一种动态规划的实现技巧。它的核心思想是:“如果一个问题已经被解决过,就直接使用之前的结果,不要重复计算。”
  • memo数组:充当“笔记本”。memo[n]用来存储第 �n 项斐波那契数的计算结果。
  • 初始化{0}确保所有元素初始为 0。因为斐波那契数列从第 1 项开始都是正整数,所以0可以作为“未计算”的标志。

  1. 调用F_mem(n)
  2. 先查表:memo[n]是否有值?
    • :直接返回,耗时 �(1)O(1) 。
    • :递归计算F_mem(n-1) + F_mem(n-2),算出后将结果写入memo[n],然后返回。
http://www.jsqmd.com/news/468528/

相关文章:

  • 什么是药物研发项目管理软件?药企如何选择适配的项目管理工具
  • AI智能体应用开发系列之基础篇(MySQL多表查询)
  • C语言项目总结
  • Cesium实现规划地图区域(五)
  • Kotlin数据类与密封类实战指南
  • DeepGen 1.0:上海创新研究院等院校联手打造“轻量级全能画师“
  • Kafka全链路防丢消息:生产者到消费者全解析
  • openclaw 笔记及注意事项
  • People dont hate Chinese people.
  • 西南财经大学团队突破性解决大模型部署难题
  • 危机解除≠回到从前:输入性通胀压力下A股的走势与投资方向洞察
  • 2026年3月12日 十二生肖 今日运势
  • Flutter 三方库 text_indexing 的鸿蒙化适配指南 - 让海量文本搜索快如闪电,打造鸿蒙应用极速全文检索引擎
  • 基于TabPFN算法的回归问题-代码运行
  • javaDay05
  • AI智能体加速工艺仿真:架构师如何用AI优化仿真模型?
  • 线性代数直觉(六):向量通过矩阵
  • LeetCode 1009 476 数字的补数
  • 职场上要懂的思维模型系列(第一章)
  • 5.7 化学反应速率 化学平衡
  • 什么是纵深防护
  • AcWing 3473. 鸡兔同笼
  • 2026 如何快速接入外汇行情 API - 实战指南
  • phar反序列化专题
  • Gitlab安装与使用
  • 迅雷下载速度慢怎么办_教你如何提高30倍
  • OpenClaw实战-NAS配置从0到1详细教程及踩坑记录
  • 195.s域的1/s采用双线性变换法变到Z域如何实现,采用双线性变换法
  • 分析和预测快速约会中双方能否成功配对
  • DRAM内存访问协议核心解析:DRAM命令交互与时序约束全解(JEDEC通用标准)