天天看点

王亟亟的Python学习之路(六)-递归,迭代,列表生成式

最近事情比较多,也没什么时间学习。(借口,明明在偷懒)

难得空下来,就继续把文章写下去。(玩手游时间更多)

在贴今天要写的内容之前还是先说一下某些概念!(概念还是很重要的,虽然更重要的是理解)

王亟亟的Python学习之路(六)-递归,迭代,列表生成式

白话的理解就是某函数自己调用自己

大牛的分析:

递归的基本思想是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。

迭代是函数内某段代码实现循环

迭代和普通循环的区别?

循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。

递归循环中,遇到满足终止条件的情况时逐层返回来结束。

平时场景可能是这样子的:

王亟亟的Python学习之路(六)-递归,迭代,列表生成式

今天的大部分例子将会用java和python来实现两种相同效果下的不同代码,让他加会觉得高级语言是有多么方便编写(不是黑java 毕竟是老牌语言啊 哈哈)

递归的概念在上面已经简单的描述了,这下就简单的写个例子:

如何实现1*2*3*4*5?

最2b的写法:

结果:120

那如果是20个,30个参数呢?难道我再传入20个,30个参数吗?

我们可以从业务逻辑中找前后数字的逻辑关系

x,x+1,x+1+1…依次递增

那我们就可以写一个方法如下:

java中:

但是过度的调用会使得栈溢出,所以引入尾递归,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。而是返回一个已经存在的值,这样就避免了栈溢出,因为永远只有一个栈

代码如下:

是不是很方便?当然刚开始的时候会对这一类的概念会很混乱(跪拜算法大牛啊)

那要么尝试算下fibonacci数列的前x位?

答案会在git中呈现

在java中:

还可以迭代字符串,dic等

而在python中,提供了更简便的功能“切片”,切片有什么效果?

lista原型: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

还可以对字符串,元组等进行切片

python内置的非常简单却强大的可以用来创建list的生成式

例子:

如果要列出0-20内%==0的数呢?

java:

python循环:

那如果使用列表生成式呢?

源码地址:https://github.com/ddwhan0123/pythonexample/blob/master/%e7%a4%ba%e4%be%8b/l4demo.py

王亟亟的Python学习之路(六)-递归,迭代,列表生成式