python函数:递归函数及二分查找算法

本文和大家分享的主要是python的递归函数及二分查找算法相关内容,一起来看看吧,希望对大家学习python有所帮助。

一、递归的定义

def story():

s = """

从前有个山,山里有座庙,庙里老和尚讲故事,

讲的什么呢?

"""

print(s)

story()

story()

老和尚讲故事

递归的定义 —— 在一个函数里再调用这个函数本身。这种魔性的使用函数的方式就叫做 递归 。

递归的最大深度:997

1、python递归最大层数限制 997

2、最大层数限制是python默认的,可以做修改

3、但是我们不建议你修改

n = 0def f():

global n

n += 1

print(n)

f()

f()

测试递归最大深度

如何修改递归最大深度:

import sys #所有和python相关的设置和方法

sys.setrecursionlimit(10000000)

n = 0def f():

global n

n += 1

print(n)

f()

f()

修改递归最大深度

递归的小实践:

1、猜年龄:

#猜e的年龄#e比d大两岁#d比c大两岁#c比b大两岁#b比a大两岁 #a 40了

# 1.a  age(1) = 40# 2.b  age(1) + 2# 3.c   age(2) + 2# 4.d  age(3) + 2# 5.e  age(4) + 2

def age(n):

if n == 1:

return 40

else:

ret = age(n-1)

return ret + 2

age(5)

猜年龄

2 、 一个数,除2到不能整除2为止:

#一个数,除2到不能整除2为止(以8为例)def cal(num):

if num % 2 == 0:

num  = num // 2

return cal(num)

else:

return num

print(cal(8))

数字整除类1

3、整除类2

#如果一个数 可以整除2 就整除#不能整除就*3+1def func(num):

print(num)

if num == 1:

return

if num %2 == 0:

num = num //2

else:

num = num * 3 + 1

func(num)

func(5)

数字整除类2

递归函数与三级菜单

递归函数实现三级菜单

二、二分查找算法

给你一个数列让你找出其中一个数的位置你怎么找?index?这是python给我们的内置函数。那他内部是怎么实现的呢?现在要求我们自己设计函数来实现这个功能。

数列例如: l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

i = 0for num in l:

if num == 66:

print(i)

i+=1

是不是感觉这个函数so easy但是我们所用的方法是循环列表然后一个一个对比。这个方法固然可以可是也只是适用于小的数组。如果这个数列很长里面上万甚至更多,一个一个找效率太低。必须有一个新的算法来解决这个问题。这就引出了今天另一个知识点 二分查找

二分查找算法:

算法:计算的方法

二分查找前提:有序的递增列表

图示:

这就是二分查找算法

简单二分法:

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

def func(l,aim):

mid = (len(l)-1)//2

if l:

if aim > l[mid]:

func(l[mid+1:],aim)

elif aim < l[mid]:

func(l[:mid],aim)

elif aim == l[mid]:

print("bingo",mid)

else:

print(’找不到’)func(l,66)func(l,6)

二分法基础版

二分法升级:

def func(l, aim,start = 0,end = len(l)-1 ):

mid = (start+end)//2

if not l[start:end+1]:

return

elif aim > l[mid]:

return func(l,aim,mid+1,end)

elif aim < l[mid]:

return func(l,aim,start,mid-1)

elif aim == l[mid]:

print("bingo")

return mid

index = func(l,68)

print(index)

二分法查找升级版

小结:

递归解决的问题:

就是通过参数,来控制每一次调用缩小计算的规模

适合的场景:

数据的规模在减小,但是解决问题的思路没有改变

结束递归的标志:return

来源:博客园

时间: 2024-10-12 06:27:16

python函数:递归函数及二分查找算法的相关文章

what&#39; the python之递归函数与二分算法

what's the 递归? 递归函数的定义:在函数里可以再调用函数,如果这个调用的函数是函数本身,那么就形成了一个递归函数. 递归的最大深度为997,这个是程序强制定义的,997完全可以满足一般情况下用到递归的情形. #最大997层 def foo(n): print(n) n += 1 foo(n) foo(1) 举个栗子,假设你想知道A的年龄,但你只知道A比B大2岁,B又比C大两岁,C又比D大两岁,D比E大两岁,恰好你知道E的岁数,那是不是就能知道A的岁数了呢,这就可以组成一个递归.那我们

Python——递归、二分查找算法

递归函数 1. 递归 (1)什么是递归:在函数中调用自身函数(2)最大递归深度:默认997/998--是Python从内存角度出发做的限制 n = 0 def story(): global n n+= 1 print(n) story() #997/998 story() (3)修改最大深度:最好不要改--递归次数太多,则不适合用递归解决问题 import sys sys.setrecursionlimit(2000) #1997/1998 2. 递归的优点 会让代码变简单 3. 递归的缺点

二分查找算法的Python实现

问题 二分查找 list.index()无法应对大规模数据的查询,需要用其它方法解决,这里谈的就是二分查找 思路说明 在查找方面,python中有list.index()的方法.例如: >>> a=[2,4,1,9,3] #list可以是无序,也可以是有序 >>> a.index(4) #找到后返回该值在list中的位置 1 >>> a.index(5) #如果没有该值,则报错 Traceback (most recent call last): Fi

Python 实现二分查找算法

最近在学习python,由于在面试中,二分查找算法面试率极高,所以使用python做了一个实现. def search1(sequence, number): lower = 0 upper = len(sequence) - 1 while lower <= upper: mid = (lower + upper) // 2 if number > sequence[mid]: lower = mid + 1 elif number < sequence[mid]: upper = m

python之路——二分查找算法

楔子 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88] 你说,so easy! l.index(66)... 我们之所以用index方法可以找到,是因为python帮我们实现了查找方法.如果,index方法不给你用了...你还能找到这个66么? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,

递归函数之二分查找

一.递归 首先引入一个例子 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? """ print(s) story() story() 老和尚讲故事 在一个函数里再调用这个函数本身,其最大层数限制是997,最大层数限制是python默认的 结束递归的标志是:return 修改递归最大深度的手段(一般情况下还是别修改比较好) import sys sys.setrecursionlimit(1000

python--递归、二分查找算法

递归 初识递归 递归的定义--在一个函数里再调用这个函数本身 现在我们已经大概知道刚刚讲的story函数做了什么,就是在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归. 刚刚我们就已经写了一个最简单的递归函数. 递归的最大深度--997 正如你们刚刚看到的,递归函数如果不受到外力的阻止会一直执行下去.但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属于它自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,于是python为了杜绝此类现象,强制

基础算法介绍 —— 二分查找算法

不知不觉在目前的公司待满3年了,打算回家找份工作.面试中被问到关于算法的题目:有哪些常见的查找算法?下来就把我所掌握的查找算法分享给大家,本文主要介绍二分查找算法. 算法定义(摘自百度):二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果

二分查找算法-精简 稳定

//************************************* // 函数名称:FineTab 二分查找算法 ->查温度表 // 函数功能:查找数据在表中相应的位置 表中数据从大到小 // 入口參数:表地址.表长度.要查找的数据 // 出口參数:无 // 返 回 值:数据在表中的位置 //***************************************/ int FineTab(int *a,int TabLong,int data)//查表数据为从大到小排序 {