【寒假实习备战day2】递归算法的学习

简单的自我介绍

我是一名双非大二学生,目前学习方向为Java后端,快速学习并学到了springboot,并和实验室的朋友做了一个简单的微信小程序,想在寒假找份有关互联网的实习,打算海投,城市和公司暂时没有特别强烈的意向,我会再次牢固的复习一遍Java整套学习知识,并且开始补充算法知识刷算法题,来备战这次寒假实习,并且想报名参加蓝桥杯Java B组的比赛,希望我的一些学习笔记能为你带来一些帮助。

两种输入输出方式的区别

  1. printf和scanf,稍微写起来有点长,但速度巨快
  2. out,稍微写的短一点,但速度稍慢
  3. 如果输入输出总数小于10^5,两者没什么区别,我们经常用cin和cout来加快写输入输出时间,如果大于则选printf和scanf,避免超时

递归

递归搜索树

结论:所有递归问题如果不是很明白,都可以用一个方法来解决,那就是画出题目其中一个案例的递归搜索树,把复杂问题变成图像问题,更方便去解决抽象问题,通过一个案例图像就可以联想其他案例的解决方法

image.png
根据斐波那契数列的定义,来推到出6的斐波那契值,因为f(n) = f(n-1) + f(n-2),f(1) = 1,f(2) = 2,这几个条件可以推出任意一个数的斐波那契值,算到f(1)和f(2)的时候,就要往前回溯值,遇到同一个节点就要相加,直到达到最后一个夫节点算是这个数的斐波那契值为止,由此我们可以写出斐波那契数列的代码形式

#include <cstring>
#include <iostream>
#include <cstdio>

using namespace std;

int f(int n)
{
    if(n == 1)  return 1;
    if(n == 2)  return 2;
    return f(n-1) + f(n-2);
}

int main()
{
    int n;
    cin >> n;
    cout << f(n) << endl;
    return 0;   
}

简单来说就是函数自己调用自己的过程

一些常用的数学知识

  1. 2^1到2^10需要知道分别是2,4,8,16,32,64,128,256,512,1024
  2. 2^20约等于为10^6
  3. 2^16是65536
  4. 2^15是32768
  5. 2^6约等于10^18

经典递归题讲解

92. 递归实现指数型枚举 - AcWing题库

image.png
先画出其中一种情况的递归搜索树的图,便于理解,进而写出代码

# acwing 92. 递归实现指数型枚举

#include <iostream>
#include <cstdio>
#include <algorithm>
const int N = 16;
int n;
int st[N];  //状态,记录每个位置的当前状态,0表示还没考虑,1表示选它,2表示不选它
void dfs(int u)
{
    if(u>n)
    {
        for(int i = 1; i <=n; i++)
            if(st[i] == 1)
                printf("%d",i);
        printf("\n");
        return;
    }

    st[u] = 2;//第一个分支
    dfs(U+1);
    st[u] = 0;

    st[u] = 1;//第二个分支
    dfs(u+1);
    st[u] = 0;
}

int main()
{
    cin >> n;
    dfs(1);
    return 0;
}

题解:我们默认第一个位置是1,进入dfs函数时,先判断是否达到结束条件,如果满足结束条件则输出对应满足条件的值,达到第一个分支时,是该位置不选的情况进行赋值,然后进入下一个位置再继续判断,为了不让子树去影响父树,所以要将该位置恢复到赋值前的状态,这样下一个位置进行判断赋值的时候就不会收到影响了,接着达到第二个分支,是该位置选的情况进行赋值,接下来的过程跟不选的情况是一样的

#实习##双非##算法#
全部评论
递归算法的学习
1 回复 分享
发布于 2022-10-16 17:42 河南

相关推荐

12-18 19:36
已编辑
门头沟学院 Java
程序员牛肉:可以的,简历没毛病了。 虽然还是偏向同质化,不过学历不错。后续我觉得重心放到刷实习+摆脱同质化问题上
实习简历求拷打
点赞 评论 收藏
分享
11-28 16:00
已编辑
武汉理工大学 Java
想干测开的tomca...:这份简历是“短期项目硬堆中大型系统技术”的“技术炫技式造假模板”,槽点密集到能当反面教材: ### 1. 「项目时长」和「技术密度」严重脱节,造假痕迹焊死在简历上 两个项目时长分别是**3个月、2个月**,但堆了Spring AI、Elasticsearch、MinIO、Kafka、ShardingSphere、Docker、Sentinel等近20个中大型项目才用的技术——正常情况下,光把这些中间件的文档看完+环境搭好,3个月都不够,更别说实现“AI多轮对话、分库分表、RBAC权限、大模型调用”这些功能。 说白了:你这不是“做项目”,是把“后端技术栈清单”往项目里硬塞,明摆着“只调用了API,没碰过核心逻辑”。
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务