python递归函数用法详解

时间:2021-05-22

上期我们介绍了函数式编程,这期内容就是关于递归的函数内容,本期还是按照老规矩,给大家进行核心整理,内容通俗易懂,搭配实际应用,以供大家理解。

关于递归:

百度解释:是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象。在计算机编程里,递归指的是一个过程:函数不断引用自身,直到引用的对象已知。使用递归解决问题,思路清晰,代码少。但是在主流高级语言中(如C语言、Pascal语言等)使用递归算法要耗用更多的栈空间,所以在堆栈尺寸受限制时(如嵌入式系统或者内核态编程),应避免采用。所有的递归算法都可以改写成与之等价的非递归算法。

总结理解:递归就是在函数内部调用自己的函数被称之为递归。

实例演示:

#直接调用自己:deffunc:print('fromfunc')funcFunc#间接调用自己deffoo:print('fromfoo')bardefbar:print('frombar')fooFoo#递归的实现:defage(n):ifn==1:return18returnage(n-1)+2print(age(5))#age(5)=age(4)+2第一次进入#age(4)=age(3)+2第二次进入#age(3)=age(2)+2第三次进入#age(2)=age(1)+2第四次进入#age(1)=18第五次进入,最后判断终止条件#age(n)=age(n-1)+2#n>1递归终止条件#age(1)=18#n=1等于终止条件

递归的回溯与递推

递推:像上边递归实现所拆解,递归每一次都是基于上一次进行下一次的执行,这叫递推。回溯:则是在遇到终止条件,则从最后往回返一级一级的把值返回来,这叫回溯。

#实例l=[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15,[16,[17,]],19]]]]]]]defsearch(l):foriteminl:iftype(item)islist:search(item)else:print(item)search(l)

阶乘实例代码:

deffact(n):ifn==1:return1returnn*fact(n-1)

上面就是一个实现阶层的递归函数,我们来试一试。

>>>fact(1)1>>>fact(5)120>>>fact(100)93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

来看一看计算过程:

===>fact(5)===>5*fact(4)===>5*(4*fact(3))===>5*(4*(3*fact(2)))===>5*(4*(3*(2*fact(1))))===>5*(4*(3*(2*1)))===>5*(4*(3*2))===>5*(4*6)===>5*24===>120

斐波那契数列

deffib(n):ifn<2:returnnelse:returnfib(n-1)+fib(n-2)

汉诺塔

defhanoti(n,x1,x2,x3):if(n==1):print('move:',x1,'-->',x3)returnhanoti(n-1,x1,x3,x2)print('move:',x1,'-->',x3)hanoti(n-1,x2,x1,x3)

到此这篇关于python递归函数用法详解的文章就介绍到这了,更多相关python递归函数用法介绍内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章