python递归和二分法
一.递归
1.递归就是自己调用自己
def fn(n):
print(n)
fn(n+1)
fn(1) #递归深度官方1000 一般都递归到998
2.树形结构的遍历
import os def fn(lujing, n):
lst = os.listdir(lujing) # 打开文件夹,列出文件内所有文件名
for i in lst: # 一个一个拿到文件名字
path = os.path.join(lujing, i) # 还原文件路径
if os.path.isdir(path): # 判断是不是文件夹
print("\t" * n, i)
fn(path, n + 1) # 递归,再一次遍历文件夹内的文件
else:
print("\t" * n, i) fn("f:/", 0)
3.递归的入口(参数) 和 出口(return)
找准入口和出口
二.二分法
掐头去尾取中间
查找效率非常的高
1.普通的二分法
lst = [1,3,5,7,12,36,68,79]
num = int(input("请输入你要查找的数:"))
left = 0
right = len(lst) - 1 # 索引就是长度-1 while left <= right:
mid = (left + right) // 2 # 取中间的数的索引
if lst[mid] > num: #当num小于中间值的时候就把右边的截掉
right = mid - 1
elif lst[mid] < num: # 当num大于中间值的时候就把左边的截掉
left = mid + 1
else:
print("找到了")
break
else:
print("没找到")
2.递归二分法
def fn(n, lst, left, right):
while left <= right:
mid = (left + right) // 2
if lst[mid] > n:
right = mid - 1
return fn(n,lst,left ,right) # 递归如果有返回值,所有调用的地方必须写return
elif lst[mid] < n:
left = mid + 1
return fn(n,lst,left, right)
else:
print("找到了")
return mid else:
print("没有找到")
return -1 n = int(input("请输入你要查找的数:"))
print(fn(n, lst,0, len(lst)-1))
三.拓展:
最快的查找法(在python中比较麻烦,其他语言快,思想可取)
lst = [1,3,55,98,37,41,2,5,1,4]
new_list = []
for i in range(max(lst)+1): #找到数据中的最大值并取到最大值个数+1的索引 因为有0
new_list.append(i)
new_list[i] = 0 # 意思是弄最大值+1个空格子 for c in lst:
new_list[c] = 1 # 把自身的值 放在对应索引的格子里 n = int(input("请输入你要查找的数:")) if new_list[n] == 1: #格子里有东西就是找到了
print("找到了")
else:
print("没有找到")
python递归和二分法的更多相关文章
- python 递归和二分法
一 内置函数 1. revserd 翻转,返回的是迭代器 # 将 s 倒置 s = '不是上海自来水来自海上' # 方法一 print(s[::-1]) # 方法二 s1 = reversed(s) ...
- python之匿名函数、递归与二分法
一.匿名函数 什么是匿名函数? 顾名思义就是没有名字的函数,在我们声明一个函数时会想起个什么函数名好,这个问题我想有时候会困惑大家的吧? def func(): #正常函数声明 pass prin ...
- python函数:匿名函数、函数递归与二分法、面向过程编程
今天主要讲三大部分内容: 一.匿名函数二.函数递归与二分法三.面向过程编程 一.匿名函数: """ 1. 什么时匿名函数 def定义的是有名函数:特点是可以通过名字重复调 ...
- python递归 及 面向对象初识及编程思想
递归 及 面向对象初识及编程思想 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递 ...
- 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法
几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...
- Python递归_打印节点信息
Python递归_打印节点信息 递归特性:1.必须由一个明确的结束条件2.每次进入更深一层递归时,问题规模相比上一次递归都应该有所减少3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用时 ...
- PYTHON-匿名函数,递归与二分法,面向过程编程-练习
# 四 声明式编程练习题 # 1.将names=['egon','alex_sb','wupeiqi','yuanhao']中的名字全部变大写names = ['egon', 'alex_sb', ' ...
- PYTHON-匿名函数,递归与二分法,面向过程编程
"""匿名函数1 什么是匿名函数 def定义的是有名函数:特点是可以通过名字重复调用 def func(): #func=函数的内存地址 pass 匿名函数就是没有名字的 ...
- Python递归实现汉诺塔
Python递归实现汉诺塔: def f3(n,x,y,z): if(n==1): print(x,'--->',z) else: f3(n-1,x,z,y) print(x,'--->' ...
随机推荐
- Ant 初级入门
一.Ant简介 Ant是一个Apache基金会下的跨平台的构件工具. 由于Ant是基于Java的,所以需要Java环境的支持,也就是配置好 JAVA_HOME 和 ANT_HOME 环境变量分别指向J ...
- 优化-最小化损失函数的三种主要方法:梯度下降(BGD)、随机梯度下降(SGD)、mini-batch SGD
优化函数 损失函数 BGD 我们平时说的梯度现将也叫做最速梯度下降,也叫做批量梯度下降(Batch Gradient Descent). 对目标(损失)函数求导 沿导数相反方向移动参数 在梯度下降中, ...
- Shell教程 之数组
1.定义数组 数组中可以存放多个值.Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似). 与大部分编程语言类似,数组元素的下标由0开始. Shell ...
- unity项目开发必备插件Asset Hunter 2(资源猎人2)
unity必备插件 Asset Hunter 2 2.4 , 工程项目过大,垃圾太多之后的清洁利器,能识别 ,移除你用不到的资源 扫码时备注或说明中留下邮箱 付款后如未回复请至https://shop ...
- jquery--blur()事件,在页面加载时自动获取焦点
jquery--blur()事件会在页面加载时自动获取焦点,应将onblur写到html标签中 <div class="inputbox"> <input typ ...
- TZOJ 3209 后序遍历(已知中序前序求后序)
描述 在数据结构中,遍历是二叉树最重要的操作之一.所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问. 这里给出三种遍历算法. 1.中序遍历的递归算法定义: ...
- swift - 正则表达式
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...
- 24-算法训练 删除数组零元素-- list的使用
http://lx.lanqiao.cn/problem.page?gpid=T201 算法训练 删除数组零元素 时间限制:1.0s 内存限制:512.0MB 从键盘读入n个整数放入 ...
- SqlServer2014导出数据库的数据字典-最新版本(字段说明也能导出)
--移动360导出数据字典 -- --快速查看表结构(比较全面的) THEN obj.name ELSE '' END AS 表名, col.colorder AS 序号 , col.name AS ...
- 计算器类(C++&JAVA——表达式转换、运算、模板公式)
运行: (a+b)*c 后缀表达式:ab+c* 赋值: Enter the a : 10 Enter the b : 3 Enter the c : 5 结果为:65 代码是我从的逻辑判断系统改过来的 ...