python静态递归函数_python 递归函数

前言:本篇关于递归基本借鉴下面博客讲解加入自己理解。

http://www.cnblogs.com/alex3714/articles/5740985.html)

1.递归函数定义

如果一个函数在函数内部调用自己,那这个函数就是递归函数。如:

defsum(arg,stop):

print(arg)

if arg

arg+=arg

sum(arg,stop)

sum(1,20)

2.递归的特性

1) 必须有一个明确的结束条件,不然进入了死循环。

2) 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3) 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

如把上例中return返回值,返回的是最初的栈值:

1 defsum(arg,stop):2 print(arg)3 if arg<4 arg sum returnarg7>

8 print(sum(1,20))9

10 #运行结果

11 1

12 2

13 4

14 8

15 16

16 32

17 2 #返回值一层一层返回arg的值,最后返回最初的栈值

demo

3.应用递归获取斐波那契数列

斐波那契数列是指前两个数加起组成第三个数规律的一组数列,如:0,1,1,2,3,5,8,13.

1 deffunc(arg1,arg2,stop):2 if arg1==0:3 print(arg1,arg2)4 arg3 =arg1+arg25 print(arg3)6 if arg3<7 func>

9 func(0,1,10)10

11 #运行结果

12 0 1

13 1

14 2

15 3

16 5

17 8

18 13

demo

4.应用递归实现二分法查找

当数据量很大时查找,适宜采用二分法。采用二分法查找时,数据需是排好序的,取中间值与查找值比较而取舍一半数据,这样可以缩减查找时间。

1 defbinary_search(data_source,find_n):2 mid=int(len(data_source)/2)3 if len(data_source)>1:4 if data_source[mid] > find_n: #data in left

5 print('data in left of [%s]'%data_source[mid])6 binary_search(data_source[:mid],find_n)7 elif data_source[mid] < find_n: #data in right

8 print('data in left of [%s]'%data_source[mid])9 binary_search(data_source[mid:],find_n)10 else:11 print('found find_s:',data_source[mid])12 else:13 print('cannot find ....')14

15 if __name__=='__main__':16 data = list(range(1,50000))17 binary_search(data,36378)18

19 #运行结果

20 data in left of [25000]21 data in left of [37500]22 data in left of [31250]23 data in left of [34375]24 data in left of [35937]25 data in left of [36718]26 data in left of [36327]27 data in left of [36522]28 data in left of [36424]29 data in left of [36375]30 data in left of [36399]31 data in left of [36387]32 data in left of [36381]33 found find_s: 36378

demo

7>4>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值