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就是这么简单。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-05-28 21:31  程序杰杰  阅读(776)  评论(0编辑  收藏  举报