python中递归函数特点_python中的递归算法

1 def recursion(i): #定义函数

2 print(i)3 if i/2 > 1: #判断递归条件,退出

4 re = recursion(i/2) #递归函数自身

5 print('返回值:',re)6 print('上层递归值:',i)7 return i #返回值

8 recursion(10)9

10

11 """

12 运行原理:首先运行函数传参10给函数,打印10,判断条件是否满足,

满足递归函数参数值为(10/2)5,打印i的值5,等递归到1.25时,判断条件不满足后,

才打印上层递归的值,此时的值为1.25,return递归最后一层的值1.25,退出最后一层递归,

继续一层层退出递归,最后返回最上层递归值结束函数。13

14 """

15

16 #输出结果为:

17 10

18 5.0

19 2.5

20 1.25

21 上层递归值: 1.25

22 返回值: 1.25

23 上层递归值: 2.5

24 返回值: 2.5

25 上层递归值: 5.0

26 返回值: 5.0

27 上层递归值: 10

python二分算法:

二分算法是能够更高效解决问题的方法:

二分查找操作的数据集必须是一个有序的数据集。开始时,先找出有序集合中间的那个元素。如果此元素比要查找的元素大,就接着在较小的一个半区进行查找;反之,如果此元素比要找的元素小,就在较大的一个半区进行查找。在每个更小的数据集中重复这个查找过程,直到找到要查找的元素或者数据集不能再分割。

二分查找能应用于任何类型的数据,只要能将这些数据按照某种规则进行排序。然而,正因为它依赖于一个有序的集合,这使得它在处理那些频繁插入和删除操作的数据集时不太高效。这是因为,对于插入和操作来说,为了保证查找过程正常进行,必须保证数据集始终有序。相对于查找来说,维护一个有序数据集的代价更高。此外,元素必须存储在连续的空间中。因此,当待搜索的集合是相对静态的数据集时,此时使用二分查找是最好的选择。

二分算法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。

#二分法查找要求:查找序列必须是有序序列#查找156在lst中的位置

lst = [1, 4, 5, 6, 8, 9, 11, 15, 17, 18, 19, 45, 49, 98, 101, 156, 178, 199]defbinary_search(lst, n, left, right):if left >right:print("没有这个数")return -1middle= (left + right) // 2

if n

right= middle - 1

elif n >lst[middle]:

left= middle + 1

else:returnmiddlereturnbinary_search(lst, n, left, right)

left=0

right= len(lst) - 1

print(binary_search(lst, 156, left, right)) #15 查找的156在列表的第15位。

python三元表达式:

使用一行代码快速判断,替换复杂的多行if语句,使得代码简单可维护。

"""三元表达式固定表达式

值1 if 条件 else 值2

条件成立 值1

条件不成立 值2"""

#普通模式判断大小:

x=2y=3

if x >y:print(x)else:print(y)#三元表达式比大小

x = 2y= 3res= x if x > y elseyprint(res)

python列表生成式:

列表生成式是Python内置的非常简单却强大的可以用来创建list的生成式。列表生成式的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。列表表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以if和for语句为上下文的表达式运行完成之后产生。运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。

#生成[1x1, 2x2, 3x3, ..., 10x10]

#不用列表生成式:

l =[]for x in range(1, 11):

l.append(x*x)print(l) #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

#使用列表生成式:

l =[]

res= [x * x for x in range(1, 11)]print(res) #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

"""先for循环依次取出列表里面的每一个元素

然后交由if判断 条件成立才会交给for前面的代码

如果条件不成立 当前的元素 直接舍弃"""

python字典生成式:

#例:

my_dict = {"a": 1, "b": 2, "c": 3}print(my_dict) #{'a': 1, 'b': 2, 'c': 3}

匿名函数:

匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:有些函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量,匿名函数是没有名字的函数,它的特点是临时存,用完就没了。

#普通函数:

defcalc(x,y):return x**yprint(calc(x=2,y=5))#换成匿名函数

calc = figure x,y:x**yprint(calc(2,5))

函数的常用的内置方法:简单的提一下:

abs():

绝对值函数。如abs(-1)= 1

#参数:#x -- 数值表达式,可以是整数,浮点数,复数。

#返回值:#函数返回 x(数字)的绝对值,如果参数是一个复数,则返回它的大小。

>>> abs(-10)10

>>> f =abs>>> f(-1)1

>>> abs=id>>> abs(1)1869788224

"""以abs()函数为例,展示两个特性。一是,内置函数是可以被赋值给其他变量的,

同样也可以将其他对象赋值给内置函数,这时就完全变了。所以,内置函数不是

Python关键字,要注意对它们的保护,不要使用和内置函数重名的变量名,这

会让代码混乱,容易发生难以排查的错误。"""

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值