python~~~~lambda表达式、递归~~~
lambda返回值是一个函数【匿名函数】
语法格式:lambda 参数:返回值
这俩个定义出来的函数是一样的【一个参数】
两个参数:
lambda表达式的重要作用
一下这样写就不用定义一个函数了,用匿名函数来执行方法
俩个比较牛逼的BIF(内置函数) 【很常用!!!!!!】
1.filter() #过滤器
filter(function or None, iterable)
第一个参数可以是函数或者None,第二个参数是可迭代的数据
如果第一个参数是函数,则将参数传入进这个函数,并将返回值为true的数据筛选出来
如果第一个参数是None,则将可迭代数据中,返回值为true的筛选出来【这里和js还挺像,针对于什么自动转化成bool来判别,比如0是false,其与数字为true】
2.map()
map(func, *iterables)
将可迭代序列分别传入进第一个参数的函数,待所有迭代完成,返回加工完成后的迭代序列
递归!!!
多用递归的思想!!!(递归就是一层层进入,再一层层返回的过程~~)
下面递归的图,形象地描述这个递归的过程~~
设置递归层次,python默认最高100层(深度)
要时常几的print这样来写哦
求阶乘~~
以下左边是Nxj独立完成,右边是小甲鱼
1非递归求法
小甲鱼这个有个bug 就是0的阶乘是1 不是0 还是我写的那个对!!!!
2.递归求法
小甲鱼这个写的挺好,else最好用这样代码看起来要清晰的多
斐波那契数列
1.非递归求法
2.递归求法
可以看出斐波那契数列递归求法的思想要比非递归求法的思想简单
但是在这里使用递归比正常迭代耗费了大量的内存和时间!!! 如输入35的时候,非递归求法马上得出答案,而递归求法耗费了大量时间
再提一下 print("总共有%d个小兔兔诞生喽"% result)【result是一个数字】
递归——汉诺塔
这个函数之所以能实现,是因为会发现,X下面的从来没有动过,而X上面都比他小,因此在执行n-1的时候不会对X下面本身有影响,就把当前执行的n以上和X绑定起来看,当做一个平台即可,这样好理解多了,因为我移动的时候实际上也是三个平台嘛
>> 无论我这n-1这一摞在X/Y/Z的哪里,他和再X没区别,因为可移动的平台还是3个,一定可以成功,将n-1这一摞下面没移动的当成和X的针为一体就好了
>>比如:移动5层,先移动4层,把第五层忽略掉,当第5层成X针》移动4层,先移动3层,把第4层当成X针》移动3层先移动2层,把第3层层当x针》移动2层先移动一层,直接先X>Y再X>Z再Y>Z即可
》》就是注释所说那样,先把n-1全部移动到Y,把最后一层移动到Z,此时Z和最后一层绑定再n-1全部移动到Z,其实就是这么简单的思路!!!,不要想得太复杂
》》不论移动Y还是Z都是可以的,n-1的任务是到Y之后再Z就是这么简单。