首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏小樱的经验随笔

    HDU 2563 统计问题(递归,思维题)

    化简得F(n)=2*F(n-1)+F(n-2); 下面给出AC代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4

    87470发布于 2018-04-08
  • 来自专栏用户3288143的专栏

    思维风暴】算法迭代和递归的理解

    文章目录 递归与迭代 递归消耗内存的缺点 为什么要有迭代 需要用迭代消解递归的情况 不需要消解的递归 结束语 递归与迭代 递归与迭代都是基于控制结构:迭代用重复结构,而递归用选择结构。 递归与迭代都涉及重复:迭代显式使用重复结构,而递归通过重复函数调用实现重复。递归与迭代都涉及终止测试:迭代在循环条件失败时终止,递归在遇到基本情况时终止。 这就存在一个把递归算法化为非递归算法的问题。 需要用迭代消解递归的情况 递归算法特别适合于所研究的问题或所处理的数据本身是递归定义的情况。 如果一个递归过程用非递归的方法实现后,速度提高了,那只是因为递归做了一些无用功。 因此,是递归的而不是迭代的算法应当表述成递归过程。如汉诺塔问题等。汉诺塔问题的递归算法中有两处递归调用,并且其中一处递归调用语句后还有其他语句,因此该递归算法不是尾递归或单向递归

    2.6K20发布于 2020-07-07
  • 来自专栏labuladong的算法专栏

    递归思维:k 个一组反转链表

    预计阅读时间:5 分钟 上篇文章 递归反转链表:如何拆解复杂问题 讲了如何递归地反转一部分链表,有读者就问如何迭代地反转链表,这篇文章解决的问题也需要反转链表的函数,我们不妨就用迭代方式来解决。 一、分析问题 首先,前文 学习数据结构的框架思维 提到过,链表是一种兼具递归和迭代性质的数据结构,认真思考一下可以发现这个问题具有递归性质。 什么叫递归性质? 我们可以直接递归调用 reverseKGroup(head, 2),因为子问题和原问题的结构完全相同,这就是所谓的递归性质。 我们公众号的成名之作之一 学习数据结构的框架思维 就提过,什么动规、回溯、分治算法,其实都是树的遍历,树这种结构它不就是个多叉链表吗?你能处理基本数据结构的问题,解决一般的算法问题应该也不会太费事。 那么如何分解问题、发现递归性质

    68520发布于 2021-09-23
  • 【杭电oj】1997 - 汉诺塔VII(递归思维

    Input 包含多组数据,首先输入T,表示有T组数据.每组数据4行,第1行N是盘子的数目N<=64. 1 1 2 3 2 6 3 6 5 4 2 3 2 1 1 3 1 3 1 2 1 1 20 2 20 17 2 19 18 16 16 15 14 13 12 11 10 9 8 7 6 5 4 3 false false false true true Author Zhousc@ECJTU Source ECJTU 2008 Spring Contest 题解: 这道题的思维要求是相当高的 对剩下的n-1个盘子递归分情况判断。 ②n盘子在b,那么是错误的移动。 ③如果n盘子在c,那么此时n移动完成,在进行着b到c的过程。对剩下的n-1个盘子递归分情况判断。 代码如下: #include <cstdio> bool hanoi(int x,int *a,int *b,int *c) { if (x == 0) //递归终止条件 return true

    35010编辑于 2025-08-26
  • 来自专栏glm的全栈学习之路

    Googol字符串 (递归思维题)

    对于每个字符串,分为三个部分、前中后,中间由最独立的0组成,前面一直继承下来不变,后面记录一个反转对应的位置以及将本位上的值翻转的次数(0变1,1变0)

    36820发布于 2021-05-27
  • 来自专栏C++信息学奥赛

    4-20 思维强化练习

    样例输入113514121481206811610573859213输出4分析:解题思路这是一个经典的活动选择问题(ActivitySelectionProblem),属于贪心算法的典型应用。 其中a1=1,a2=2,a3=4,a4=7,a5=11,a6=16,……令Si=a1+a2+……+ai,求Sn的值输入描述一行包含一个整数n,输出描述输出一个整数,表示Sn的值,因为Sn的值可能特别大, 解题思路数列规律分析:观察数列a的前几项:a1=1a2=a1+1=2a3=a2+2=4a4=a3+3=7a5=a4+4=11a6=a5+5=16可以发现递推关系:ai=a[i−1]+(i−1),其中i≥ (1)数组的并集:给定两个数组A,B把他们所有的元素合并在一起,并按照从小到大排序组成的集合,叫做数组A与数组B的并集;比如:数组{1,2,3}和{2,3,4}的并集是{1,2,3,4}。 (2)数的交集:给定两个数组A,B由所有属于数组A且属于数组B的元素,并按照从小到大排序组成的集合,所组成的集合,叫做集合A与集合B的交集;比如:数组{1,2,3}和{2,3,4}的交集为{2,3}。

    23310编辑于 2026-06-06
  • 来自专栏不知非攻

    从基础概念到进阶思考,完整的递归思维学习

    无论是刷算法题,还是日常开发,递归都是一个非常常用的解决问题的思路。利用递归思维,我们可以使用少量的代码解决复杂的问题。 不过在刚开始的时候,递归通常没有那么容易理解,我们就从图示中的几个方向,系统的为大家介绍递归的学习与运用。 0、基础概念 递归是一种迭代思维。是对复杂问题的一种拆解。 我们这里使用的是一个非常基础的例子来演示递归思维,并非为了探讨什么样的计算方式来实现数字累加更合适 1、基础案例一 在代码实现中,递归主要包含两个部分。 函数调用自身。 ("fabonacci: {}", fabonacci.at(10)) 4递归进阶:分治策略 我们再来回顾一下递归思维:重复的将问题拆分为同类型的子问题。 当我们熟悉了这个基础的递归思维之后,那么我们就可以对拆分方式于合并方式进行进一步的思考,以学习到更多的高级用法。 分治策略就是在递归的基础之上,对拆分方式进行调整演变出来的一种高效解题思路。

    1.3K21编辑于 2024-04-18
  • 来自专栏CSDNToQQCode

    Rust算法——汉诺塔问题——递归思维的经典案例

    汉诺塔(Tower of Hanoi)是经典的递归问题,它完美展示了递归思维的核心:将复杂问题分解为相同结构的子问题。 本文将详细介绍汉诺塔问题的递归解法,分析其时间复杂度,并提供多种实现方式和可视化方案。 目录 1. 问题描述 2. 递归解法 3. 算法实现 4. 复杂度分析 5. 迭代解法 6. 可视化实现 7. 实际应用 8.1 递归思维训练 汉诺塔问题是理解递归思维的绝佳案例: /// 递归思维要点总结 fn recursive_thinking_summary() { println! ("递归思维要点:"); println!("1. 找到问题的子结构(相同模式)"); println!("2. 定义递归终止条件"); println!("3. 汉诺塔展示了递归的优雅和强大 虽然时间复杂度是指数级,但递归解法是最直观的 可以通过栈模拟实现迭代版本 递归思维模式: 分解:将问题分解为子问题 解决:递归解决子问题 合并:组合子问题的解

    69010编辑于 2025-12-16
  • 来自专栏机器学习与统计学

    4思维导图:学会 Python 爬虫

    原创:ZOE酱 https://zhuanlan.zhihu.com/p/36204695 这次给大家带来的是4思维导图,梳理了 Python 爬虫部分核心知识点:网络基础知识,Requests, 本文思维导图仅仅涉及了爬虫最核心基础的部分,但足够应对入门所需了~ 1 爬虫基础知识 ? 2 Requests 库 ? 3 BeautifulSoup & urllib ? 4 Scrapy 爬虫框架 ?

    87330发布于 2019-07-05
  • 来自专栏余林丰

    4.比较排序之归并排序(递归

    在每一层递归中都有3个步骤:   1.分解问题   2.解决问题   3.合并问题的解   举例待排序数组:{6, 5, 3, 1, 7, 2, 4},将它原始序列做分解。 ?    可以经过不断的递归分解可以看到已经把原始数组序列不断分解为最小单位,接下来不妨将它们看做是二叉树的叶子节点。 ?    Java 1 package com.algorithm.sort.merge; 2 3 import java.util.Arrays; 4 5 /** 6 * 归并排序(递归) Merge { 10 public static void main(String[] args) { 11 int[] nums = {6, 5, 3, 1, 7, 2, 4} ) 2 def merge_sort(nums): 3 segment(nums, 0, len(nums) - 1) 4 return nums 5 6 #切分待排序数组

    93480发布于 2018-01-12
  • 来自专栏深度学习之tensorflow实战篇

    递归与伪递归区别,Python 实现递归与尾递归

          递归函数在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函 数。(1) 递归就是在过程或函数里调用自身。 (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。 递归一般用于解决三类问题:  (1)数据的定义是按递归定义的。(n的阶乘)    (2)问题解法按递归实现。 (回溯)    (3)数据的结构形式是按递归定义的。(二叉树的遍历,图的搜索) 递归的缺点:   递归解题相对常用的算法如普通循环等,运行效率较低。 因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储,因此递归次数过多容易造成栈溢出。 fact(5)对应的fact_iter(5, 1)的调用如下:  ''' #实现过程解读 ===> fact_iter(5, 1) ===> fact_iter(4, 5) ===> fact_iter

    2.4K10发布于 2019-02-14
  • 来自专栏深度学习之tensorflow实战篇

    递归与伪递归区别,Python 实现递归与尾递归

          递归函数在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函 数。(1) 递归就是在过程或函数里调用自身。 (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。 递归一般用于解决三类问题:  (1)数据的定义是按递归定义的。(n的阶乘)    (2)问题解法按递归实现。 (回溯)    (3)数据的结构形式是按递归定义的。(二叉树的遍历,图的搜索) 递归的缺点:   递归解题相对常用的算法如普通循环等,运行效率较低。 因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储,因此递归次数过多容易造成栈溢出。 fact(5)对应的fact_iter(5, 1)的调用如下:  ''' #实现过程解读 ===> fact_iter(5, 1) ===> fact_iter(4, 5) ===> fact_iter

    2.8K70发布于 2018-03-16
  • 来自专栏个人分享

    思维体系---技术思维、业务数据思维、产品思维、复合思维

    那么总的来说,我分为四种思维模式: 一、技术思维   卧槽!干代码!出bug了!没错,这就是你进步的源头。 二、业务数据思维   业务思维上,更多会考虑到业务本身的价值,具有较强的业务敏感度。 三、产品思维   对于产品思维,很多人会想到,程序员总想砍死产品经理,改来改去哈哈。。但是其实产品思维的核心在于 与人打交道、与业务打交道、与技术打交道 以及 事物的推动作用。 那么产品思维,我们就可以概括为:业务本身、技能专业度、洞察力、心理学、全局观、高情商以及耐心,是一种复合的思维。 四、复合思维    毕竟本人也是技术出身,所以对于技术的感官更加强烈哈哈。。 但是如果,你能在精通专业技术的基础上,融合 技术 业务 产品 的体系化思维模式,我称之为复合型思维,因为这种思维模式,包含强大的同理心,包含敏锐的洞察力,同时也包含一定的视野广度,需要结合心理学、哲学、

    1.5K10发布于 2018-09-06
  • 来自专栏技术杂记

    一个运维人员的编程思维4

    Growth hacking 就是一个很典型的例子,通过关键动作的大数据分析,和AB测试以数据来驱动增长

    65430编辑于 2021-11-26
  • 来自专栏数林觅风——数据科学思维导图笔记

    4思维导图:Python 爬虫 | Requests,BeautifulSoup,Scrapy

    这次给大家带来的是4思维导图,梳理了 Python 爬虫部分核心知识点:网络基础知识,Requests,BeautifulSoup,urllib 和 Scrapy 爬虫框架。 第一次抓到数据时,感觉世界都明亮了呢~ 由于日常项目要求不高,本文思维导图仅仅涉及了爬虫最核心基础的部分,但足够应对入门所需了~ P.S.由于平台对图片有一定程度的压缩,建议下载高清原图(公众号后台回复 工具:XMind ▍思维导图 1 爬虫基础知识 ? 2 Requests 库 ? 3 BeautifulSoup & urllib ? 4 Scrapy 爬虫框架 ? 不感兴趣的朋友直接跳过即可~ 最近在忙着写英文稿子,等弄完这段,就正式开始分享思维导图精读类笔记,不再只局限于编程这一小领域了~我也会陆续把自己学习思维导图的经验分享给大家。希望大家喜欢。 哎,ZOE 酱也很想快点有这个和大家交流的机会呢~目前还不清楚开通的硬性标准是什么……运营时间太短,关注量也比较少 ~可能还需要大家等待一些时日~ 对思维导图有任何意见都可以反馈给 ZOE 酱哦~感谢

    1.3K30发布于 2018-07-20
  • 来自专栏腾讯技术工程官方号的专栏

    递归」第三季Ep4:深耕源于热爱

    我们为什么叫「递归」 “递归” (recursion) 是一种在程序设计语言中被广泛使用的算法。它有两大特点,一是调用自己,二是化繁为简。我们当中那些优秀的技术人又何尝不是如此? 这就是我们「递归」栏目的初心,记录平凡腾讯技术人的不平凡。 因为喜欢,她选择成为一名技术工程师;因为热爱,她选择深耕一线坚持了快20年。 《递归3》第四集,带你走近光背后的他们。 2021年底的log4j组件产生严重的技术漏洞。我们通过搭建一个稳定可靠的通道,为修复漏洞做技术支持,使策略同学更好的推动修复。 刚入职腾讯时的张彦玲,负责qq后台容灾项目,经常3、4点起床维修故障,做备份、重构。 工作的压力不仅没有拖拽她正常的工作节奏,反而使她更加潜心技术,每天坚持早到一点,多学一点。

    65740编辑于 2022-11-11
  • 来自专栏技术一点点成长

    递归与尾递归

    前言:   本博客前面介绍了不少跟递归的思想相关的例子,比如“汉诺塔”,“八皇后”等。因最近又回忆起“尾递归”,故本文通过2个例子再跟大伙儿探讨一下尾递归。。。 什么是尾递归: 当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归递归实例一: 求阶乘! 1 package com.gdufe.recure; 2 3 import java.util.Scanner; 4 5 public class Factorial { 6 7 1 package com.gdufe.recure; 2 3 import java.util.Scanner; 4 5 public class Palindrome { 6 7 true 尾递归的意义: 从以上尾递归的实现过程当中我们可以发现,回归过程中不用做任何操作(运算),这样的一种特性使得在执行尾递归的过程时,能够被某些特定编译器进行优化,减少内存空间的消耗。

    1.4K20编辑于 2022-08-09
  • 来自专栏踏浪的文章

    递归与尾递归

    +(n-1)+n 的总和 递归 按照我们一般的思维,很快就能想到使用递归函数来解决这个问题,所以来看看递归是怎么解决的呢 function fn(n){ if( n === 0 || n === 1 ){ return 1 } return n + fn(n - 1) } 如果 n=5 那么上面的函数运行流程 n = 5 ==> 5 + fn(5 - 1) n = 4 ==> 5 + 4 + fn(4 - 1) n = 3 ==> 5 + 4 + 3 + fn(3 - 1) n = 2 ==> 5 + 4 + 3 + 2 + fn(2 - 1) n = 1 ==> 5 + 4 + 3 + 2 + 1 即:最后的结果是 5 + 4 + 3 + 2 + 1 = 15 可以看到,一般的递归,每一级递归都需要调用函数,同时这个函数还与其他的表达式运算,那这样的递归每一次都会创建新的栈。 (n -1, total + n) } 同样是 n=5,来看看运行过程 n = 5 ==> fn(5, 1) n = 4 ==> fn(4, 6) n = 3 ==> fn(3, 10) n = 2 =

    1.7K10发布于 2019-11-28
  • 来自专栏python+前端 知识分享

    「Python」递归函数(递归特点和递归案例)

    函数调用自身的编程技巧称为递归。一、递归函数的特点特点:一个函数内部调用自己,函数内部可以调用其他函数,当然在函数内部也可以调用自己。代码特点:1. 这个非常重要,通常被称为递归的出口,否则会出现死循环示例代码:def sum_numbers(num): print(num) # 递归的出口很重要,否则会出现死循环 # 递归的出口: 二、递归案例 - 计算数字累加需求:1. 定义一个函数 sum_numbers2. 能够接收一个 num 的整数参数,3. ,初次接触递归会感觉有些吃力,在处理不确定的循环条件时,格外的有用,例如遍历整个文件目录的结构。 以上就是对递归函数的相关介绍,后面开始介绍面向对象,这个也是编程语言中重要且难的知识点了,或许文字教程不会很通透但是也有Python视频教程在python自学网。

    4.5K30编辑于 2022-06-15
  • 来自专栏Linux云计算网络

    漫谈递归转非递归

    1 bool BinarySearch(int *arr, int n, int key) 2 { 3 4 if (n == 1) //第二种简单情境 5 return 1 //递归判断一个字符串是否为回文串level, abba; 2 bool isPalinString(int n, char* str) 3 { 4 if (n == 1 || n == 0 来举例子: fact(5, 1, 1) fact(5, 2, 1) fact(5, 3, 2) fact(5, 4, 6) fact(5, 5, 24) 思路二:统计步数从n递减到简单情境。 2, 1) fact1(3, 3, 2) fact1(2, 4, 6) fact1(1, 5, 24) fact1(0, 6, 120) 2、斐波那契数列:fib(n) = fib(n-1) + fib if (i <= 2) return cur; else return fib1(i-1, cur, pre+cur); } fib1(5, 1, 1) fib1(4,

    2.5K70发布于 2018-01-11
领券