首页 > 其他分享 >递归学习笔记

递归学习笔记

时间:2024-02-20 19:57:30浏览次数:30  
标签:递归 int ...... 笔记 times 学习 rec dp

本文同步发表在洛谷博客

我们充分发扬人类智慧:
将递推和递归混为一谈
在 \(dp\) 的基础上来学递归
然后把递推和 \(dp\) 混为一谈
然后我就发现:
™的我 \(dp\) 没学好!
然后去学 \(dp\),
然后发现我递推没学好,
所以四舍五入我递归也学不好,
那就不学了!
image

好了让我们步入正题


正文

首先,递归recursive需要一个函数,我们叫这个函数rec

int rec(int a){

}
void rec(int a){

}

然后我们拿洛谷的 P5739 计算阶乘 练练手:

P5739 计算阶乘

题目描述

求 \(n!\),也就是 \(1\times2\times3\dots\times n\)。
挑战:尝试不使用循环语句(for、while)完成这个任务。

解题过程

暴力

在我们啥也不知道的时候,肯定是使用for循环暴力出奇迹:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,ans=1;
    cin>>n;
    for(int i=1;i<=n;i++){
        ans*=i;
    }
    cout<<ans;
}
-----------------------
编程语言:C++20 O2

代码长度:160B

用时:16ms

内存:680KB

AC记录

动态规划,dp

首先,明白题目让我们做什么,显然是算出 \(1 \times 2 \times 3 \times ...... \times n-1 \times n\)

接着,确认第 \(i-1\) 步的状态是 \(1 \times 2 \times ...... \times i-1\),第 \(i\) 步的状态是 \(1 \times 2 \times ...... \times i-1 \times i\),因此,我们得出 dp 公式:

\[dp[i]=dp[i-1] \times i \]

然后,我们可以写出以下代码:

#include<bits/stdc++.h>
using namespace std;
map<int,int>dp;
int main(){
    int n;
    cin>>n;
    dp[1]=1;
    for(int i=2;i<=n;i++){
        dp[i]=dp[i-1]*i;
    }
    cout<<dp[n];
}
-------------------------------
编程语言:C++20 O2

代码长度:196B

用时:20ms

内存:564KB

怎么比暴力还慢?

AC记录

递归

这就是题面中说的挑战部分,以前我还不会做,现在会了。

根据上文我们提到的 dp 公式:

点击查看 dp 公式

\[dp[i]=dp[i-1] \times i \]

标签:递归,int,......,笔记,times,学习,rec,dp
From: https://www.cnblogs.com/StarsTwinkle/p/18023944

相关文章

  • 高斯消元 学习笔记
    \[\Large\text{GaussianElimination}\]数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。——百度百科说实话,我不相信这是高斯发明的。感觉像是个小学生都学过的加减消元法。它的时间复杂度与方程个数、未知数个数有关,一般来讲,是\(O......
  • 基于yolov2深度学习网络的血细胞检测算法matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本MATLAB2022a 3.算法理论概述         血细胞检测是医学图像处理领域的重要任务之一,对于疾病的诊断和治疗具有重要意义。近年来,深度学习在医学图像处理领域取得了显著成果,尤其是目标检测算法在血细胞检测方面表现出......
  • ADB学习记录
        ADB安装   1、adb下载,下载成功后,在本地解压;      Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip   2、配置环境变量:把解压路径放到系统变量里去(Path);         3、按ctrl+R,输入cm......
  • 开始学习web-sql注入
    web内容多且杂,不知道怎么下手开始学,那就先从sql注入开始学吧目前只在b站上找了一些课程,还有ctfwiki作为参考链接贴在下面:ctfwikihttps://www.bilibili.com/video/BV1c34y1h7So/?spm_id_from=333.337.search-card.all.click&vd_source=27b6c7c9811379b1cf1a595591fa3086要是能......
  • Markdown学习
    Markdown学习二级标题三级标题四级标题字体Hello,World!Hello,World!Hello,World!Hello,World!引用学习java,自律起来分割线图片超链接[点击跳转到ranxx博客](ranxx-博客园(cnblogs.com))列表ABCABC表格名字性别生日张三男1997.1.......
  • Vue学习笔记 1-- 环境搭建
    第一步:安装vscode第二步:安装nodejs--node-v14.17.6-x64(需要注意版本--版本过高或过低均会导致程序打包运行问题)——一路默认,会安装对应的npm注:版本和程序中使用的依赖包不一致会导致各种打包异常......,因此需根据自身项目实际情况安装对应版本==>程序打包问题npmi/npmi......
  • 初中英语优秀范文100篇-085How to Deal with Our Study Problems-如何处理我们的学习
    PDF格式公众号回复关键字:SHCZFW085记忆树1Althoughweoftenfeelstressed,weshouldfindsuitablewaystodealwithstress.翻译虽然我们经常感到有压力,但我们应该找到合适的方式来应对压力。简化记忆压力句子结构Althoughweoftenfeelstressed是一个让步......
  • 洛谷题单指南-递推与递归-P1259 黑白棋子的移动
    原题链接:https://www.luogu.com.cn/problem/P1259题意解读:要打印最终的状态,关键在找到一些变化的规律,直接的暴力搜索复杂度太高。解题思路:从样例出发ooooooo*******--oooooo--******o*oooooo******--o*ooooo--*****o*o*ooooo*****--o*o*oooo--****o*o*o*oooo****--o*o*o*ooo--......
  • C++ 模板的笔记2
    C++模板的笔记2关于可变参函数模板借鉴了一部分笔记,感谢大佬类模板中的嵌套类模板可以嵌套其他类模板,就像普通类可以嵌套其他普通类一样。嵌套的类模板可以访问外部类模板的成员,包括私有成员。示例:#include<iostream>usingnamespacestd;template<typenameT>classO......
  • 解决方案 | 笔记本电脑能连上WIFI,但是无Internet显示地球图标,怎么回事?(win10)
    一、背景任务栏托盘区显示地球图标,但是实际上可以上网。   疑难诊断一般是这种情况: 二、可能的有效解决方案 0方案0:使用360断网急救箱傻瓜式修复个人制作|360断网急救箱新版-2.0版单文件绿色版分享(解决99%的电脑无法上网问题)https://www.cnblogs.com/issacne......