python二分法递归_python 【递归 及 二分法】
python 【递归函数 及 二分法】
一、递归的定义
在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。
递归的最大深度——997
#修改递归层数
import sys
sys.setrecursionlimit(10000000)#修改递归层数
n=0
def f():
global n
n+=1
print(n)
f()
f()
我们可以通过以上代码,导入sys模块的方式来修改递归的最大深度。
sys模块:所有和python相关的设置和方法
. 结束递归的标志:return
.递归解决的问题就是通过参数,来控制每一次调用缩小计算的规模
使用场景:数据的规模在减少,但是解决问题的思路没有改变
很多排序算法会用到递归
# 小例子:
# 猜年龄
# alex多大了 alex 比 wusir 大两岁 40+2+2
# wusir多大了 wusir 比 金老板大两岁 40+2
# 金老板多大了 40了
# age(1)
# n = 1 age(2)+2
# n = 2 age(3)+2
# n = 3 age(3) = 40
# def age(n):
# if n == 3:
# return 40
# else:
# return age(n+1)+2
#
# print(age(1))
# # n = 1
# def age(1):
# if 1 == 3:
# return 40
# else:
# return age(2)+2
#
# # n = 2
# def age(2):
# if 2 == 3:
# return 40
# else:
# return age(3)+2
#
# # n = 3
# def age(3):
# if 3 == 3:
# return 40
二、二分算法
# 算法
# 99*99 = 99*(100-1) = 9900-99 = 9801
# 人类的算法
# 99 * 99
# 算法 计算一些比较复杂的问题
# 所采用的 在空间上(内存里) 或者时间上(执行时间) 更有优势的方法
# 排序 500000万个数 快速排序 堆排序 冒泡排序
# 查找
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 cal(l,num,start,end):
mid = (end - start)//2 + start
if l[mid] > num :
cal(l, num, start, mid-1)
elif l[mid] < num: # 13 24
cal(l,num,mid+1,end)
else:
print('找到了',mid,l[mid])
cal(l,60,0,len(l)-1)
#
# def cal(l,num=66):
# length = len(l)
# mid = length//2
# if num > l[mid]:
# l = l[mid+1:]
# cal(l,num)
# elif num < l[mid]:
# l = l[:mid]
# cal(l, num)
# else:
# print('找到了',l[mid],mid)
# cal(l,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]
def cal(l,66,0,24):
mid = 12 + 0
if 41 > 66 :
cal(l, num, start, mid-1)
elif 41 < 66: # 13 24
cal(l,66,13,24)
else:
print('找到了',mid,l[mid])
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 cal(l,66,13,24):
mid = 5 + 13
if 67 > 66 :
cal(l, 66, 13, 17)
elif l[mid] < num: # 13 24
cal(l,num,mid+1,end)
else:
print('找到了',mid,l[mid])
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 cal(l,66,13,17):
mid = 2 + 13
if 55 > 66 :
cal(l, num, start, mid-1)
elif 55 < 66:
cal(l,66,16,17)
else:
print('找到了',mid,l[mid])
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 cal(l,60,16,17):
mid =0 + 16
if 56 > 60 :
cal(l, num, start, mid-1)
elif 56 < 60: # 13 24
cal(l,60,17,17) #None
else:
print('找到了',mid,l[mid])
#
# 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 cal(l,60,17,17):
mid = 0 + 17
if 60 > 66 :
cal(l, num, start, mid-1)
elif 60 < 66: # 13 24
return cal(l,60,18,17)
else:
print('找到了',17,66)
def cal(l, 60, 18, 17):
if start
mid = 0+18
if 67 > 66:
cal(l, 60, 18,17)
elif 60 < 66: # 13 24
cal(l, 60, 18, 17)
else:
print('找到了', 17, 66)
else:
print('没找到')
# 算法
# def cal(l,num,start=0,end=None):
# # if end is None:end = len(l)-1
# end = len(l)-1 if end is None else end
# if start <= end:
# mid = (end - start)//2 + start
# if l[mid] > num :
# return cal(l, num, start, mid-1)
# elif l[mid] < num: # 13 24
# return cal(l,num,mid+1,end)
# else:
# return mid
# else:
# return None
# 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]
# print(cal(l,56))
# 参数太多 -------- ???
# 找的数不存在 ———— 解决了
# print return ------- 解决
python二分法递归_python 【递归 及 二分法】相关推荐
- python静态递归函数_Python递归函数相关
函数中调用其他函数是解决实际问题中常用方法,递归函数便是函数在运行过程中调用自身的函数.它像是循环的另一种表达方式,不过相较于写循环,递归函数封装性较好.可读性较强.在解决一些循环问题时,使用递归函数 ...
- python棋盘放麦粒求和递归_Python递归调用实现数字累加的代码
我就废话不多说了,直接上代码吧! def sum_numbers(num): # 1.出口 if num == 1: return 1 # 2.数组累加 temp = sum_numbers(num ...
- python斐波那契递归_Python递归斐波那契示例
python斐波那契递归 Good day, learners! In this tutorial we are going to learn about Python Recursion and u ...
- python找零钱_Python递归 - 找零钱
特殊的方法-循环: #无法解决某些情况,例如存在21元的零钱 def fun(n): count = 0 while n > 25: n = n - 25 count = count + 1 w ...
- python二分法编程_python基础18——二分法面向过程匿名函数
二分法 算法:是高效解决问题的办法 算法之二分法 格式: def binary_search(ls, num, lower=0, high=None): if high is None: high = ...
- python 二分查找_Python实现二分法搜索
二分法是一种效率比较高的搜索方法,时间复杂度为 O(log2n) .假设有一个1~100之间的数字,你来猜这个数是多少,每猜一次可以得到三种回答:正确.大了或小了.如何保证用最少的次数猜对?很多人会想 ...
- 二分法(递归非递归)
递归: #include <iostream> using namespace std; bool binary(int *arr,int low,int high,int fla ...
- C语言 二分法查找与递归二分法查找
1.二分法查找 1.算法:二分法查找适用于数据量较大时,但是数据需要先排好顺序 2.主要思想是: (设查找的数组区间为arraylow, high]) 确定该区间的中间位置K.将查找的值T与array ...
- python递归_Python开启尾递归优化!
Python尾递归优化 一般递归与尾递归 一般递归: def normal_recursion(n): if n == 1: return 1 else: return n + normal_recu ...
最新文章
- 转载-SQL Server各种导入导出数据方式的比较
- labelme3.16.5 标注工具的安装与下载
- 看得见的数据结构Android版之数组表(数据结构篇)
- 用C#实现C/S模式下软件自动在线升级[转载]
- Mongodb 自动增长 自增id 实现
- php归档函数(按时间)实现
- 排序方法总结C++实现
- linux java url 异常_java异常处理总结
- android源码灭屏时蓝牙自动配对
- 3D点云分割算法汇总
- JAVA 16进制转字符串问题
- 不错的离线IP地址定位库
- 发现策略中的孪生兄弟——期权交易中的等价或相似策略解析
- Vid2Vid多图详解
- 一些手机APP默认的文件保存位置
- Medusa工具使用(转)
- 随机梯度下降法的数学基础
- 艾伦图灵_艾伦唤醒控制
- 如何安装成英文版本的vmware
- 【BZOJ】4355: Play with sequence
热门文章
- 多协议标签交换的MPLS原理
- 回文串 --- 动态dp UVA 11584
- 关于在linux操作系统中中不能删除创建创建的用户的操作
- 解决用navicate远程连接数据库出现1045 access denied for user 'root'@'localhost' using password yes...
- mysql修改表引擎Engine
- Servlet基础(一) Servlet基础和关键的API介绍
- 【转载】 了解实时媒体的播放(RTP/RTCP 和 RTSP)
- 面向对象原则之GOF是招式,九大原则才是精髓
- 人工智能和神经科学之间有什么关系?诺奖得主这样说……
- 微软计划使用 Rust 取代 C和C+