news 2026/1/10 11:22:23

笨人小白的温故知新——递归(4)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
笨人小白的温故知新——递归(4)

1202:Pell数列

其实本来是一段很简单的代码,但是这个题带给我的收获很大,所以我决定来做一个自己的反思回顾。

来讲一下我做这道题遇到的问题(主要是解决运行超时的问题):

1)我一开始并没有用记忆化,导致运行超时。

2)我用了一个记忆化(但是是错的)

long long pell(int k){ if(!pell(k)) return ; }

现在,我已经知道了我的错因:!pell(k)试图判断返回值是否为 0,但pell(k)本身又会无限递归,永远无法执行到后续逻辑;

3)然后我做了如下改动:

const int MOD = 32767 , N = 1e6+10; long long a[N] ; long long pell(int k){ if(a[k] != 0) return a[k] ; if(k == 1) return 1 ; if(k == 2) return 2 ; a[k] = (2*pell(k-1) + pell(k-2))%MOD ; return a[k] ; }

这样,就获得了一个AC代码:

#include <iostream> #include <stdio.h> using namespace std ; const int MOD = 32767 , N = 1e6+10; long long a[N] ; long long pell(int k){ if(a[k] != 0) return a[k] ; if(k == 1) return 1 ; if(k == 2) return 2 ; a[k] = (2*pell(k-1) + pell(k-2))%MOD ; return a[k] ; } int main() { int n , s ; scanf("%d" , &n) ; while(n--){ scanf("%d" , &s) ; printf("%lld\n" , pell(s)) ; } return 0; }

你以为这就结束了?NO~~~ 好奇的我,又换了一种:

a[k] = 2*pell(k-1)%MOD + pell(k-2)%MOD ;

但是却运行超时了。why?

笨笨的我问了豆包,豆包说:

“取模是「相对耗时」的操作

取模(%)本质是除法 + 求余,属于 CPU 的复杂指令(比加法 / 乘法慢得多)。前者只执行 1 次取模,后者执行 2 次,仅这一步就会产生「指令数翻倍」的开销 —— 尤其是在循环 / 递归的高频调用场景下(比如计算 pell (1e5)),两次取模的累计耗时会被放大,最终体现为「后者更慢」。”

今天也回顾了好几道题,但是都比较简单,所以没有写到我的博客里。(嘻嘻

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/31 6:06:58

监控网络实施

需求&#xff1a;公司共计6个监控区域&#xff0c;各监控区域摄像头数量20个。核心交换机使用的是S6520-30SG-SI。各监控区域使用的直连交换机是S5024X-EI。一、梳理6个区域共计120个摄像头&#xff0c;核心交换机&#xff08;S6520-30SG-SI&#xff09;与接入交换机&#xff0…

作者头像 李华
网站建设 2025/12/20 0:53:02

Jenkins Font Awesome API插件:现代化插件界面的图标引擎

在Jenkins的生态系统中&#xff0c;用户界面&#xff08;UI&#xff09;的直观性和美观性对于提升用户体验至关重要。长期以来&#xff0c;许多Jenkins插件依赖于过时的Tango图标集&#xff0c;这在视觉上和功能上都已无法满足现代Web应用的需求。Font Awesome API插件的出现&a…

作者头像 李华
网站建设 2025/12/16 18:45:50

Jenkins Pipeline共享库(Shared Library)完全指南

Jenkins的 Pipeline: Groovy Libraries插件 是实现“流水线即代码”的关键&#xff0c;它通过**共享库&#xff08;Shared Library&#xff09;**机制&#xff0c;让团队能将通用的Pipeline逻辑&#xff08;如构建、部署步骤&#xff09;封装起来&#xff0c;供所有项目复用&am…

作者头像 李华
网站建设 2025/12/16 18:44:31

多语言国际打车平台 (PangudiDi)项目介绍说明

一、项目背景及简介项目概述PangudiDi 是一个基于 uni-app 框架开发的多语言国际打车平台&#xff0c;专为海外市场设计&#xff0c;特别针对阿拉伯语地区&#xff08;如也门&#xff09;的出行需求。平台采用现代化的移动端技术栈&#xff0c;提供完整的乘客端和司机端解决方案…

作者头像 李华
网站建设 2025/12/16 18:41:12

VonaJS: Election

如果需要在后端启动一个独立服务&#xff0c;在 VonaJS 中该如何实现呢&#xff1f; 由于 VonaJS 是分布式架构&#xff0c;后端可以启动多个 Workers。那么&#xff0c;应该在哪个 Worker 中启动独立服务呢&#xff1f; VonaJS 针对此场景提供了Election&#xff0c;工作原理…

作者头像 李华
网站建设 2026/1/4 23:09:51

如何了解腾讯云国际站代理商的NLP有什么优势呢?

要了解腾讯云国际站代理商的 NLP 优势&#xff0c;可从腾讯云国际站 NLP 本身的技术能力&#xff0c;以及代理商提供的附加服务两方面切入&#xff0c;也能通过官方及代理商渠道进一步核实&#xff0c;具体如下&#xff1a;产品本身的核心技术优势多语言与高准确率兼具&#xf…

作者头像 李华