python数据结构与算法 20 递归和递归三定律

2024年Python最新Python数据结构与算法(4)--递归 🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。 阅读详情

递归

本章目标

  • 理解很多复杂问题,如果不用递归就很难解决,用递归也许非常简单
  • 学会怎样进行递归编程
  • 理解并应用递归三定律
  • 理解递归也是一种迭代
  • 建立一个问题的递归方法
  • 理解递归在计算机系统内是如何进行的。

什么是递归?

递归是解决问题的一种方法,它把问题拆解得越来越小,直到变得非常容易,一般情况下,递归过程要包括一个自我访问的函数。与表面看起来似乎不一样,其实递归允许我们写出非常简洁的代码,但解决问题却很复杂,用其他办法很难处理。

列表元素求和

我们先不用递归,看一个问题不用递归是如何处理的。

假如你想计算一个整数列表各项的和,如[1,3,5,7,9]。下面的代码所示,函数使用了一个累加变量(theSum)来计算所有列表的项目的和:

deflistsum(numList):

    theSum = 0

    for i in numList:

        theSum = theSum + i

    return theSum

 

print(listsum([1,3,5,7,9]))

假如我们没有while和for循环语句,你又怎样来计算一系列数字的和呢?如果你是数学家,也许会想到,加法是一个函数,有两个参数,就是一对数字。把一个列表求和问题转为两个数字的求和问题,那么上面的过程可以写成一个完全括号表达式:

((((1+3)+5)+7)+9)

We can also parenthesize the expression theother way around,

还可以用另一种完全括号表达式:

(1+(3+(5+(7+9))))

注意最里层的括号,(7+9)的计算,我们不需要循环或其他结构就能算出来,事实上用下面的顺序计算出最后的和:

 

total= (1+(3+(5+(7+9))))

total= (1+(3+(5+16)))

total= (1+(3+21))

total= (1+24)

total= 25

 

这种想法怎样变成python程序呢?首先要重新表达一下元素求和的问题。我们也可以说列表元素之和,是第一个元素numList[0]和其他所有元素的和numList[1:],就如下式所示:

 

listSum(numList)=first(numList)+listSum(rest(numList))

在这个等式中,first(numList) 是列表第一个数据项,而rest(numList)是除第一项之外所有其他项,用python这样表达:

1

ef listsum(numList):

   if len(numList) == 1:

        return numList[0]

   else:

        return numList[0] + listsum(numList[1:])

 

print(listsum([1,3,5,7,9]))

2

3

4

5

6

7


这段7行的代码里有几个关键的想法。首先,第2行,检查这个列表是否只有一个数据,这步检查很重要,是函数的“例外条款”。长度为1的列表求得最简单,就是数据自身。其次,第5行,我们的函数调用了它自己!这正是我们把它叫做递归算法的原因,递归函数就是调用自己的函数。

如图1所示,一连串的递归调用来求得列表[1,3,5,7,9]的和,应该把这连串的调用当作连续的简化,每次调用,都是解决越来越简单的问题,直到问题再也不能简化。



图1 列表求和的递归调用

当问题到了不能再简化的终点,我们开始归拢被简化的问题,直到最开始的问题得以解决。如图2所示,列表求和从连串调用中返回,当listSum从最早一次调用中返回时,整个问题就解决了。


图2 列表求和的连续返回过程

递归三定律

象阿西莫夫机器人三定律一样,所有递归算法必须遵守三个重要定律:

1.   递归算法必须有一个基点

2.   递归算法必须有一个趋向基点的状态变化过程

3.   递归算法必须自我调用

让我们更细致地研究一下这些定律,并观察在列表求和算法是如何使用的。首先,基点是让算法停止递归的点,通常是一个可以直接得到答案的简单问题。在列表求和过程中,基点是长度为1一个列表。

遵守第二定律,我们必须安排一个状态变化并朝向基点运行。状态变化意思是递归算法中某些数据是可变的,通常是让我们的问题变简单的数据在变。在列表求和算法中,主要数据是列表,所以必须改变列表。既然基点是长度为1的列表,那最自然的过程就是缩短列表。这就是第5行的过程,每次递归都在计算一个更短的列表。

第三定律是算法必须自我调用。这正是递归的定义。递归的概念对很多初级程序员来说容易犯糊涂。作为初入门者,你要了解到这个功能之所以好用,是因为它可以把大的问题分解成小问题。小问题就是可以写一个函数就能解决的问题。当我们讨论递归的时候,似乎是陷在一个圈套中,我们有一个要用函数解决的问题,但是这个函数要调用自己来解决问题,但在逻辑上并非如此,递归解决问题的方式是优雅地把问题变得越来越小越来越容易。

在本章的后部,我们会看到更多的实例,在每个实例中,我们都聚焦在设计一个方案,使用递归三定律来分解问题。







 

数据结构与算法(Python语言实现)算法题目(总集篇) 集合了我学习算法的所有题目,都已经分类归档好! 阅读详情

相关推荐

数据结构与算法Python版之北大慕课笔记(二)

数据结构与算法Python版之北大慕课笔记(二))一、递归基础1. 递归三定律2. 递归版数列求和3. 递归版任意进制转换4. 递归调用的实现和深度限制二、递归可视化:分形树1. 递归可视化2. 分形树:自相似递归图形3. 谢尔宾斯基Sierpinski三角形4.分治策略三、优化问题和贪心策略1. 找零兑换问题 一、递归基础 1. 递归三定律 递归算法必须有一个基本结束条件(最小规模问题的直接解...

冠军阿狗的博客 1078

Python数据结构与算法(4)--递归

文章目录递归1.初始递归2.递归的应用1.数列求和2.任意进制转换3.递归调用的实现4. 递归可视化 分形树 递归 1.初始递归 递归使用的是分治策略 递归是一种解决问题的方法,其精髓在于将问题分解为规模更小的相同问题,持续分解,直到问题规模小到可以用非常简单直接的方式来解决。递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中调用自身。 初识递归 : 数列求和 # 数列的和=“ 首个数” +“ 余下数列” 的和 # 如果数列包含的数少到只有1个的话,它的和就是这个数了 def lists

li520_fei的博客 242

裘宗燕-数据结构与算法python描述笔记(队列)

裘宗燕-数据结构与算法python描述笔记(队列):队列的实现以及迷宫问题的求解

qq_42927387的博客 1091

Python数据结构与算法——递归

递归,python中递归深度限制的解决办法,递归求阶乘和汉诺塔问题

qq_63043783的博客 545

python数据结构: 递归1

1. 递归的定义 ❖递归 Recursion是一种解决问题的方法,其精髓在于将问题分解为规模更小的相同问题,持续分解,直到问题规模小到可以用非常简单直接的方式来解决。 ❖递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中调用自身。 ❖递归为我们提供了一种对复杂问题的优雅解决方案,精妙的递归算法常会出奇简单,令人赞叹。 2.初识递归:数列求和 #用for循环写 def listsum...

数据分析阿宇君的博客 410

Python数据结构与算法(4.1)——递归

递归函数是直接调用自己或通过一系列语句间接调用自己的函数。递归在程序设计有着举足轻重的作用,在很多情况下,借助递归可以优雅的解决问题。本节主要介绍递归的基本概念以及如何构建递归程序。

盼小辉丶的博客 10万+

递归的三定律

递归的三定律 例: def listsum(numList): if len(numList) == 1: return numList[0] else: return numList[0] + listsum(numList[1:]) print(listsum([1,3,5,7,9])) 所有递归算法必须服从三个重要的定律: 1. 递归算法必须具有基本情况。 2. 递归算法必须改变其状态并向基本情况靠近。 3. 递归算法必须以递归方式调用自身。 首先,基本情况是算法停止递归的条件。基本情况通常是足够

hezhenpp的博客 2222

手把手教你使用ESM-2进行蛋白质结构预测:从安装到实战

本文详细介绍了如何使用ESM-2蛋白质语言模型进行蛋白质结构预测,从环境准备、模型安装到实战应用。通过逐步指导,读者可以掌握ESM-2的配置、单序列预测、结果可视化及高级优化技巧,适用于生物信息学研究和药物开发。

weixin_29306875的博客 532

数据结构与算法分析(四):递归

本系列为《Python数据结构与算法分析》第二版学习笔记,作者:布拉德利.米勒;戴维.拉努姆。 文章目录一、递归三原则二、用递归计算一列数之和三、将整数转换为任意进制的字符串四、用递归画谢尔平斯基三角形 递归是解决问题的一种方法,它将问题不断地分成更小的问题,直到子问题可以用普通的方法解决。通常情况下,递归会使用一个不停调用自己的函数。 一、递归三原则 (1)递归算法必须有基本情况; (2)递归算法必须改变其状态并向基本情况靠近; (3)递归算法必须递归的调用自己。 基本情况是指使算法停止递归的条件,这通常

jason_cdd的博客 1079

从0到1搭建StarRocks3.4.1存算一体架构(VM 虚拟机版)

本文详细介绍了如何在VM虚拟机上从零搭建StarRocks 3.4.1存算一体架构。首先阐述了StarRocks作为高性能分布式SQL数据仓库的优势,重点讲解了其存算一体架构的设计原理。随后提供完整的安装指南,包括环境准备(3台CentOS 8虚拟机配置)、网络互通验证、Java环境配置、软件包解压安装等关键步骤。文章特别详细说明了FE和BE节点的配置文件修改(fe.conf和be.conf)以及必要的防火墙端口开放配置。通过图文并茂的方式,帮助开发者和运维人员快速掌握StarRocks集群部署方法,为后续

小 tom的博客 1329

用4690张图片搞定物流仓储难题:手把手教你训练YOLOv8纸箱检测模型(附完整源码)

本文详细介绍了如何利用YOLOv8目标检测技术解决物流仓储中的纸箱识别难题。通过4690张图片构建高质量数据集,提供完整的训练教程和源码,实现98.7%的mAP@0.5准确率。文章涵盖数据采集、模型训练、调参技巧到边缘计算部署的全流程,帮助读者快速构建智能仓储检测系统。

weixin_28717939的博客 377

数据结构与算法 python版 之 递归三定律

递归的定义

qq_34589842的博客 612

IDEA 2023.2最新破解安装教程(含详细配置步骤及常见问题解决)

本文详细介绍了IDEA 2023.2的安装流程及高效开发环境搭建指南,涵盖基础配置、项目结构优化、核心功能使用、插件推荐、性能优化等全方位内容,帮助开发者快速掌握这一强大的Java开发工具。

x2y3z4a5b的博客 1751

数据结构与算法Python版 递归与可视化

介绍递归“三定律”和实现分析。介绍递归可视化:分形树和谢尔宾斯基三角形。

分享、交流、合作 903

大白话,Android Studio安装及其资源分享(离线gradle配置)

安装AndroidAtudio,并通过aliClound镜像与离线gradle配置,来跳过相对“繁文缛节”的过程,直接实现开发

wangzixuanemp的博客 3597

大学计算 - NumPy库的矩阵运算 实训答案

本文介绍了三个NumPy矩阵操作的实验练习。第一关练习ndarray类型操作,包括矩阵构造、元素平方和计算、矩阵乘积运算和逆矩阵行列式计算;第二关针对matrix类型,涉及绝对值最大值获取、特定矩阵乘积运算和转置矩阵特征值计算;第三关实现Moore-Penrose伪逆矩阵计算,并与NumPy内置pinv函数结果比较误差。实验涵盖了NumPy核心矩阵操作,展示了从基础运算到高级矩阵分解的应用,帮助掌握科学计算中的矩阵处理技巧。

2403_89314916的博客 309

数据结构与算法python版本之线性结构之递归Recursion

实际上,真正的谢尔宾斯基三角形是完全不可见的,其面积为0,但周长无穷,是介于一维和二维之间的分数维(约1.585)构造。分形Fractal,是1975年由Mandelbrot开创的新学科——一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似的)是整体缩小后的形状,即具有。上面这个例子,最内层的括号是(7+9),这是无需循环即可计算的,实际上整个求和的过程就是按照括号内一步一步计算的。这样,我们可以把树分解为三个部分:树干、左边的小树、右边的小树,分解后,正好符合递归的定义:对自身的调用;

qq_41780297的博客 1083

从SOMEIP看SOA,汽车电子电器架构的转变

从SOMEIP看SOA,汽车电子电器架构的转变

天赐好车的博客 241

数据结构与算法Python版 递归的应用

递归应用示例,包括:十进制转换任意进制,汉诺塔问题和探索迷宫问题。

分享、交流、合作 1003

枚举 ACS 电机状态位 完全解析

本文解析了ACS运动控制器SDK中的MotorStates枚举,该枚举对应控制器状态标志位?MFLAGS。主要介绍了6个核心状态:ACSC_ALL(-1)表示所有轴,ACSC_NONE(0)为空闲状态,ACSC_MST_ENABLE(1)为轴使能,ACSC_MST_INPOS(16)表示到位,ACSC_MST_MOVE(32)为运动中,ACSC_MST_ACC(64)为加速中。文章还补充了完整的枚举定义,包含报警、回零等状态,并提供了在晶圆AOI4轴运动中的典型应用场景,如判断轴状态、运动条件等。最后强调只

StevenChen的博客 245

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Python递归算法详解

本文介绍了递归算法的基本原理、应用场景,并通过具体的Python代码示例详细讲解了递归算法的使用。递归是一种强大的算法设计技巧,能够解决许多复杂的问题。在应用递归算法时,需要注意递归终止条件的正确性,以避免无限递归的问题。通过掌握递归的原理和应用技巧,我们可以更好地理解和应用递归算法,提升问题解决的能力。

Rocky006的博客 4378

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python数据结构与算法学习之递归

递归

Daley_的博客 955

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Python】教你彻底了解Python中的数据结构与算法

​​​​。

Easonmax的博客 4079

python数据结构与算法-递归

学习python数据结构和算法。该书的第三章节-递归。介绍了一些对您理解本文稍后介绍的算法很重要的概念。了解运行时堆栈和堆是如何工作的,以便在我们的程序中调用函数,成为一名更好的程序员。构建一个关于代码工作原理的心理模型,可以预测代码的功能。编写递归函数对计算机程序员来说也是一项重要的技能。以下是本文应该学到的:•能够识别程序中的各种作用域。•能够识别变量引用属于哪个范围:局部、封闭、全局或内置范围。记住LEGB规则。•能够通过绘制程序执行时的运行时堆栈和堆的图片来跟踪程序的执行。

qq_36771396的博客 745

【数据结构与算法python】递归算法的python实现

1、概念解释 2、实现原理 (1)累加和 (2)进制转换 3、例子 (1)分形树 (2)谢尔宾斯基三角形 (3)汉诺塔

思南的博客 774

数据结构与算法(Python版)十八:什么是递归

什么是递归Recursion? 递归是一种解决问题的方法, 其精髓在于 将问题分解为规模更小的相同问题,持续分解,直到问题规模小到可以用非常简单直接的方式来解决。递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中调用自身。 递归为我们提供了一种对复杂问题的优雅解决方案, 精妙的递归算法常会出奇简单, 令人赞叹。 初识递归:数列求和 问题:给定一个列表, 返回所有数的和 列表中数的个数不定,需要一个循环和一个累加变量来迭代求和 程序很简单, 但假如没有循环语句? 既不能用 for,也不能用 w

神薯片 6554
上一篇: python数据结构与算法 19有序列表 ADT及实现
下一篇: python数据结构与算法 21 递归的实现和应用
杀了这个男孩
博客等级 码龄18年 149粉丝 38原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值