首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java递归和迭代_Java中的迭代与递归

和递归一样。时间要求随着输入的增长呈线性的可以叫做线性迭代。 迭代 VS 递归 比较了两个程序,我们可以发现,他们看起来几乎相同,特别是其数学函数方面。在计算n!...所以,这样即可能白费大量的空间,假如递归太深的话还有可能导致堆栈溢出。 接下来分析迭代。其实,递归都可以用迭代来代替。但是相对于递归的简单易懂,迭代就比较生硬难懂了。...尤其是遇到一个比较复杂的场景的时候。但是,代码的难以了解带来的有点也比较显著。迭代的效率比递归要高,并且在空间消耗上也比较小。 递归中肯定有迭代,但是迭代中不肯定有递归,大部分可以相互转换。...能用迭代的不要用递归,递归调用函数不仅白费空间,假如递归太深的话还容易造成堆栈的溢出。 数形递归 前面详情过,树递归随输入的增长的信息量呈指数级增长。...比较典型的就是斐波那契数列: 用文字形容就是斐波那契数列中前两个数字的和等于第三个数字:0,1,1,2,3,5,8,13,21…… 递归实现代码如下: int fib (int n) { if (

2.1K40

用递归的思想实现二叉树前、中、后序迭代遍历

先复习一下前、中、后遍历的顺序: 前序遍历顺序:中-左-右 中序遍历顺序:左-中-右 后序遍历顺序:左-右-中 用递归来写二叉树遍历是非常简单的,例如前序遍历的代码如下: const result =...此时的调用栈如图所示: ? 为什么要说这个呢?因为递归遍历的执行过程就是这样的,只不过是函数不停的调用自身,直到遇到递归出口(终止条件)。...理解了递归调用栈的情况,再来看看怎么利用递归思想实现前序迭代遍历: function preorderTraversal(root) { const result = [] // 用一个数组...弹出节点 4 并从它的右子节点开始新的循环 由于节点 4 的右子节点为空,所以不会进入 while 循环,然后弹出节点 4 的父节点 2 再从节点 2 的右子节点开始循环 看到这是不是已经发现了这个迭代遍历的过程和递归遍历的过程一模一样...而且用递归的思想来实现迭代遍历,优点在于好理解,以后再遇到这种问题马上就能想起来怎么做了。 中序遍历 中序遍历和前序遍历差不多,区别在于节点出栈时,才将节点的值推入到 result 中。

81450
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用Python进行爬虫的初学者指南

    Tqdm是另一个python库,它可以迅速地使您的循环显示一个智能进度计—您所要做的就是用Tqdm(iterable)包装任何可迭代的。 03 演示:抓取一个网站 Step 1....寻找您想要抓取的URL 为了演示,我们将抓取网页来提取手机的详细信息。我使用了一个示例(www.example.com)来展示这个过程。 Stpe 2. 分析网站 数据通常嵌套在标记中。...分析和检查我们想要获取的数据被标记在其下的页面是嵌套的。要查看页面,只需右键单击元素,然后单击“inspect”。一个小的检查元件盒将被打开。您可以看到站点背后的原始代码。...现在,我们可以在div的“product-desc-rating”类中提取移动电话的详细信息。我已经为移动电话的每个列细节创建了一个列表,并使用for循环将其附加到该列表中。...div标记是块级标记。它是一个通用的容器标签。它用于HTML的各种标记组,以便可以创建节并将样式应用于它们。

    2.2K60

    爬虫必备Beautiful Soup包使用详解

    title节点内包含的文本内容为: 横排响应式登录 h3节点所包含的文本内容为: 登录 嵌套获取节点内容 HTML代码中的每个节点都会出现嵌套的可能,而使用Beautiful Soup获取每个节点的内容时...head.children所获取的则是一个'list_iterator'可迭代对象,如果需要的获取该对象中的所有内容可以直接将其转换为list类型或者通过for循环遍历的方式进行获取。...代码如下: print(list(soup.head.children))   # 打印将可迭代对象转换为列表形式的所有子节点 for i in soup.head.children:    # 循环遍历可迭代对象中的所有子节点...Python中的列表类似,如果想获取可迭代对象中的某条件数据可以使用切片的方式进行,如获取所有P节点中的第一个可以参考如下代码: print(soup.find_all(name='p')[0])   ...# 打印所有p节点中的第一个元素 因为bs4.element.ResultSet数据中的每一个元素都是bs4.element.Tag类型,所以可以直接对某一个元素进行嵌套获取。

    2.6K10

    python爬虫从入门到放弃(六)之 BeautifulSoup库的使用

    在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定....story 嵌套选择 我们直接可以通过下面嵌套的方式获取 print(soup.head.title.string) 子节点和子孙节点 contents的使用 通过下面例子演示: html = """...p标签下的所有子标签存入到了一个列表中 列表中会存入如下元素 ?...children的使用 通过下面的方式也可以获取p标签下的所有子节点内容和通过contents获取的结果是一样的,但是不同的地方是soup.p.children是一个迭代对象,而不是列表,只能通过循环的方式获取素有的信息...,以及父节点的父节点也放到列表中,并且最后还会讲整个文档放到列表中,所有列表的最后一个元素以及倒数第二个元素都是存的整个文档的信息 兄弟节点 soup.a.next_siblings 获取后面的兄弟节点

    1.8K100

    Python爬虫实战-抓取《盗墓笔记》所有章节及链接

    本次以一个盗墓笔记的小说阅读网(http://seputu.com)为例,抓取盗墓笔记的标题、章节名和链接,如下图 前提: 这是一个静态网站,标题、章节都不是由JavaScript动态加载的,无代理,无登录...分析目标url的HTML结构: 分析结果如下: 标题和章节都被包含在div class="mulu">标记下,标题位于其中的div class="mulu-title"标记下的标签中,章节位于其中的...div class="box"下的标签中。...字典嵌套在列表中: soup = BeautifulSoup(req.text, "html.parser") content = [] _list = [] for mulu in soup.find_all...链接": href, "章节名": box_title}) content.append({"标题": h2_title, "章节列表": _list}) 最后将数据存储在.json文件中:

    1.8K91

    爬虫之链式调用、beautifulsoup、IP代理池、验证码破解

    Soup pip install beautifulsoup4 #安装解析器 Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml ....在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定....使用BeautifulSoup解析上述代码,能够得到一个 BeautifulSoup 的对象,并能按照标准的缩进格式的结构输出 from bs4 import BeautifulSoup soup=BeautifulSoup...的text就能取出文章内的所有文字 # string:获取当前第一级目录的文字,如果嵌套多层,就取不出文字 # strings:生成器,每一层的文字都放在里面 p=soup.body.p print(p.text...) print(p.string) print(list(p.strings)) # 用的比较少(了解) #5、嵌套选择 print(soup.head.title.string) print(soup.body.a.string

    1.6K20

    python爬虫之BeautifulSoup4使用

    除了支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果不安装它,则Python会使用默认的解析器。...经过初始化,使用prettify()方法把要解析的字符串以标准缩进格式输出,发现结果中自动补全了html和body标签。...需要注意,列表中的每个元素都是 p 节点的直接子节点。比如第一个 a 节点里面的span节点,这相当于子孙节点了,但返回结果并没有单独把span节点列出来。...遍历输出一下可以看到,这次的输出结果就包含了 span 节点。descendants 会递归查询所有子节点,得到所有的子孙节点。...因为都是Tag类型,所以依然可以继续嵌套查询,还是同样文本,查询ul节点后再继续查询内部li节点。

    1.3K20

    爬虫0040:数据筛选爬虫处理之结构化数据操作

    [, end]]) # 4.全文匹配获取迭代器 # 从目标字符串中查询所有符合匹配规则的字符,并存储到一个迭代器中 value_iter = pattern.finditer(string[, start...Xpath Xpath原本是在可扩展标记语言XML中进行数据查询的一种描述语言,可以很方便的在XML文档中查询到具体的数据;后续再发展过程中,对于标记语言都有非常友好的支持,如超文本标记语言HTML。...BeautifulSoup4 BeautifulSoup也是一种非常优雅的专门用于进行HTML/XML数据解析的一种描述语言,可以很好的分析和筛选HTML/XML这样的标记文档中的指定规则数据 在数据筛选过程中其基础技术是通过封装...得到匹配到的第一个div的子节点列表迭代器 # for e1 in soup.div.children: # print("-->", e1) print(soup.div.descendants...)# 得到匹配到的第一个div的子节点迭代器,所有后代节点单独一个一个列出 # for e2 in soup.div.descendants: # print("==>", e2) 入门第四弹:

    3.2K10

    BeautifulSoup的使用

    BeautifulSoup学习 前面已经将一个html页面以beautifulsoup对象的格式保存在了index.html中,接下来将用这个html文件用作示例练习(PS:这个时候就不要去访问网站了,...1、对象的种类 要掌握BeautifulSoup中对象操作,需要了解html的结构:http://www.runoob.com/html/html-elements.html。 ?...当然,由于contents中可能包含子节点信息,则所有的子节点信息都会在列表中输出。 ? 结果: ? .children:这是一个迭代器,可以对tag标签的子节点进行循环获取。... div> div 2)、parents:通过元素的 .parents 属性可以递归得到元素的所有父辈节点 get_title = bsobj.body.div.ul...div div nav body html [document] 3、兄弟节点 标签处于同一层的节点,他们的父节点是同一个,这样的节点称为兄弟节点。

    83710

    【二叉树进阶】二叉树的前中后序遍历(非递归迭代实现)

    二叉树的前序遍历 题目链接: link 不用递归,用迭代算法如何实现对二叉树的前序遍历? 最终放到一个vector里面返回。...1.1 思路分析 前序遍历的非递归呢我们可以这样来搞: 题目中给的二叉树比较简单,下面通过这样一棵二叉树给大家讲解: 对它进行非递归的前序遍历,它是这样搞的: 前序遍历是根、左子树、右子树...所以非递归的前序遍历是这样处理的: 他把一棵二叉树分为两个部分: 左路结点 左路结点的右子树 对于每一棵左子树,也是同样划分为这两个部分进行处理。...,不过我们这个后面比较方便往中序和后序的方向上修改。...二叉树的中序遍历 题目链接: link 接下来我们就来看一下二叉树中序遍历的非递归如何实现 2.1 思路分析 其实大体的思路还是跟上一道题的差不多,最后写出来跟上一题的代码也基本一样,其中一句代码换一下位置就行了

    21410

    『Python工具篇』Beautiful Soup 解析网页内容

    安装 pip install beautifulsoup4 引入 from bs4 import BeautifulSoup 基础用法 解析器 在 Beautiful Soup 中,解析器的作用是将原始的...解析器负责解析标记语言中的标签、属性和文本,并将其转换成一个可以被程序操作的数据结构,比如树形结构或者 DOM 树。这样我们就可以通过编程的方式来访问、提取和操作网页中的数据了。...也就是这么用: BeautifulSoup('div>雷猴div>', 'lxml') 到此,相信各位工友对于 BeautifulSoup 的用法还是有点懵的。...# 省略部分代码 # 以下两句的输出结果是一样的 print(soup.a.attrs['href']) # 简化版 print(soup.a['href']) 嵌套选择 可以通过嵌套选择的方式精准选择元素...而在 BeautifulSoup 中可以使用 contents 属性获取某元素的直接子元素。

    34710

    python3 爬虫学习:爬取豆瓣读书Top250(三)

    CSS选择器 点击查看更多CSS选择器的详细介绍 在html的CSS选择器中,用‘#’代表‘id’,用‘.’代表‘class’。...我们还是以上面的例子来表述,当我们想要选择所有‘id = 'name'’的div>标签里面的‘class = 'pl'’的标签时,就可以写成‘#name .pl’,即嵌套在‘id = 'name...嵌套可以是任意层级,只要后面那个选择器在前面的选择器里面。如果只需要直接嵌套在第一层符合条件的元素,可以用 > 分隔。比如:.item > .book。...我们使用BeautifulSoup对象的select()方法,将CSS选择器作为参数传入到select()里面,可以把下面的例子改写一下: #查找所有属性为class = 'pl2' 的 div 标签...items = bs.find_all('div' , class_ = 'pl2') for i in items: #查找 class_='pl2' 的 div 标签中的 a 标签 tag

    1.4K10

    Python3网络爬虫实战-29、解析库

    解析器 BeautifulSoup 在解析的时候实际上是依赖于解析器的,它除了支持 Python 标准库中的 HTML 解析器,还支持一些第三方的解析器比如 LXML,下面我们对 BeautifulSoup...接下来输出了它的类型,是 bs4.element.Tag 类型,这是 BeautifulSoup 中的一个重要的数据结构,经过选择器选择之后,选择结果都是这种 Tag 类型,它具有一些属性比如 string...嵌套选择 在上面的例子中我们知道每一个返回结果都是 bs4.element.Tag 类型,它同样可以继续调用节点进行下一步的选择,比如我们获取了 head 节点元素,我们可以继续调用 head 来选取其内部的...,所以这样我们就可以这样做嵌套的选择了。...嵌套选择 select() 方法同样支持嵌套选择,例如我们先选择所有 ul 节点,再遍历每个 ul 节点选择其 li 节点,样例如下: from bs4 import BeautifulSoup soup

    1.8K30
    领券