day15 函数的使用方法:递归函数
这里归纳的知识点主要就是:
浮点数,复数,
int,整形;float,浮点数;complx,复数;
# 实数:
# 有理数 有限小数 1.2
# 无限循环小数 1.23232323232323.....
# 无理数 无限不循环小数
#浮点数-小数
#浮动
#1.2 = 12*0.1
#1.2 = 0.12*10 # py2和3的区别
# print(1/2) #浮点数的特点
# a = 1.15346974071908269370703493
# print(a) #float
# print(float('1.234')) #复数 a+bj 实部+虚部
# 实数 :1
# 虚数 :j
#平方是-1的数就是j
"-1"
#复数:
# 复数之间不能比较大小
# 2+3j
# 2+3J
# complex
递归函数
初识递归:
# def story():
# print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?') #功能解耦:
#为什么要有函数:提高代码可读性,避免重复的代码,提高代码的复用性
#在函数中能return的不要print
# while True:
# story() # def story():
# print('从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呢?')
# story()
#
# story()
# import sys
# # print(sys.getrecursionlimit())
# sys.setrecursionlimit(2000000000)
# n = 0
# def func():
# global n
# n+=1
# print(n)
# func()
# func() #递归
#在一个函数里面 调用 自己
#默认的递归最大限度 1000
#不要修改默认的递归最大限度
#往往 递归 都是 和循环挂在一起的
# 人理解循环 神理解递归
# 算法,递归函数
# 认识递归
# 递归函数怎么读?
# 带着你写两段代码 #多大了alex,我不告诉你,alex比egon大两岁 44+2
#egon多大了,我不告诉你,egon比wusir大两岁 42+2
#wusir多大了,我不告诉你,wusir比金鑫大两岁 40+2
#金鑫40了 # age(1) n = 1 age(2)+2
# age(2) n = 2 age(3)+2
# age(3) n = 3 age(4)+2
# age(4) n = 4 40 def age(n):
if n == 4:
return 40
return age(n+1)+2 print(age(0)) # def age(0):
# if n == 4:
# return 40
# return age(1)+2 #48 # def age(1):
# if 1 == 4:
# return 40
# return age(2)+2 #46 这个46返回给上面的return age(1)+2
#
# def age(2):
# if 2 == 4:
# return 40
# return age(3)+2 # 44 这个44返回给上面的return age(2)+2
#
# def age(3):
# if 3 == 4:
# return 40
# return age(4)+2 #return 42 这个42返回给上面的return age(3)+2
#
# def age(4):
# if 4 == 4:
# return 40 这个40返回给上面的return age(4)+2
# # age(n+1)+2
二分查找算法:
#算法:一种计算的方法
# 3+2
# 3*2+5
# 99*28 == (100-1)*28 == 28*100 - 28
# 典型问题:冒泡排序,快速排序,堆排序
# 查找算法 # 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(l.index(66))
# index = 0
# for i in l :
# if i == 66:
# print(index)
# index += 1 # 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 find(lst,aim):
# mid = len(lst)//2
# if lst:
# if aim > lst[mid]:
# new_lst = lst[mid+1:]
# find(new_lst,aim)
# elif aim < lst[mid]:
# new_lst = lst[:mid]
# find(new_lst, aim)
# else:
# print(aim,mid)
# else:
# print('您要找的值不存在')
# find(l,36) # def find(lst,66): #lst = [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]
# mid = len(lst)//2 #mid = 12 = 25//2
# if lst:
# if 66 > 41:
# new_lst = lst[mid+1:] #new_lst = [42,43,55,56,66,67,69,72,76,82,83,88]
# find(new_lst,aim) #find([42,43,55,56,66,67,69,72,76,82,83,88],66)
# else:
# print('您要找的值不存在')
#
# def find(lst,aim): #lst = [42,43,55,56,66,67,69,72,76,82,83,88],66
# mid = len(lst)//2 #mid = 12//2 = 6
# if lst:
# if 66 > 69: #66
# new_lst = lst[mid+1:]
# find(new_lst,aim)
# elif 66 < 69:
# new_lst = lst[:mid] #[42,43,55,56,66,67]
# find(new_lst, aim) #find([42,43,55,56,66,67],66)
# else:
# print('您要找的值不存在')
#
#
# def find(lst,aim): #[42,43,55,56,66,67],66
# mid = len(lst)//2 #mid = 3
# if lst:
# if 66 > 56:
# new_lst = lst[mid+1:] #66,67
# find(new_lst,aim) #find([66,67],66)
# elif aim < lst[mid]:
# new_lst = lst[:mid]
# find(new_lst, aim)
# else:
# print(aim,mid)
# else:
# print('您要找的值不存在')
#
# def find(lst,aim): #[66,67],66
# mid = len(lst)//2 #mid = 1
# if lst:
# if 66 > 67:
# new_lst = lst[mid+1:]
# find(new_lst,aim)
# elif 66 < 67:
# new_lst = lst[:mid] #[66]
# find(new_lst, aim) #find([66],66)
# else:
# print(aim,mid)
# else:
# print('您要找的值不存在')
#
# def find(lst,aim): #[66],66.5
# mid = len(lst)//2 #mid = 0
# if lst:
# if 66 > 66:
# new_lst = lst[mid+1:]
# find(new_lst,aim)
# elif 66 < 66.5:
# new_lst = lst[:mid] #[]
# find(new_lst, aim) #find([],66)
# else:
# print(aim,mid)
# else:
# print('您要找的值不存在') # def find_2(l,aim,start=0,end=None): #[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]
# if end == None:end = len(l) - 1 #start = 0,end = 24
# if start <= end:
# mid = (end-start) // 2 + start #mid = 12
# if l[mid] > aim:
# find_2(l,aim,start,mid-1)
# elif l[mid] < aim: #
# find_2(l,aim,mid+1,end) #find_2(l,58,13,24)
# else:
# print(aim,mid)
# else:
# print('找不到这个值')
# 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]
# find_2(l,58) #如果要找的值不存在
#返回值的问题 # def find_2(l,aim,start=0,end=None): #[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]
# if end == None:end = len(l) - 1 #start = 13,end = 24
# mid = (end-start) // 2 + start #mid = 18
# if l[mid] > aim:
# find_2(l,aim,start,mid-1) #find_2(l,58,13,17)
# elif l[mid] < aim:
# find_2(l,aim,mid+1,end)
# else:
# print(aim,mid)
#
# def find_2(l,aim,start=0,end=None): #[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]
# if end == None:end = len(l) - 1 #start = 13,end = 17
# mid = (end-start) // 2 + start #mid = 15
# if l[mid] > aim:
# find_2(l,aim,start,mid-1)
# elif l[mid] < aim:
# find_2(l,aim,mid+1,end) #find_2(l,58,16,17) [56,66]
# else:
# print(aim,mid)
#
# def find_2(l,aim,start=0,end=None): #[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]
# if end == None:end = len(l) - 1 #start = 16,end = 17
# mid = (end-start) // 2 + start #mid = 16
# if l[mid] > aim:
# find_2(l,aim,start,mid-1)
# elif l[mid] < aim:
# find_2(l,aim,mid+1,end) #find_2(l,58,17,17) [56,66]
# else:
# print(aim,mid)
#
# def find_2(l,aim,start=0,end=None): #[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]
# if end == None:end = len(l) - 1 #start = 17,end = 17
# if start > end:
# print('找不到这个值')
# mid = (end-start) // 2 + start #mid = 17
# if l[mid] > aim:
# find_2(l,aim,start,mid-1) #find_2(l,58,17,16)
# elif l[mid] < aim:
# find_2(l,aim,mid+1,end)
# else:
# print(aim,mid) def find_2(l,aim,start=0,end=None): #[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]
if end == None:end = len(l) - 1 #start = 0,end = 24
if start <= end:
mid = (end-start) // 2 + start #mid = 12
if l[mid] > aim:
ret = find_2(l,aim,start,mid-1)
return ret
elif l[mid] < aim: #
ret = find_2(l,aim,mid+1,end) #find_2(l,58,13,24)
return ret
else:
return aim,mid
else:
print('找不到这个值')
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(find_2(l,87)) #参数传递
#返回值的问题
#找不到值的问题
#参数太多的问题
阶乘算法,斐波那契数列算法:
#阶乘的计算
#什么叫阶乘: 7 #7*6*5*4*3*2*1 def f(n):
if n == 1:
return 1
else:
return n*f(n-1) # f(3) #斐波那契数列
# 1,1,2,3,5,8,13....
# n = 10
# f(10) = f(8)+f(9)
def fib(n):
if n == 1 or n == 2:
return 1
return fib(n-1)+fib(n-2) print(fib(6)) ####本来会斐波那契了,这样把递归函数套进来,然后就不会了。。。。好难理解啊,怎么这么绕啊
我居然自己搞明白了!我简直太牛逼了!
这是我自己推导的斐波那契数列的思路
# 斐波那契数列:
def fib(n):
if n == 1 or n == 2:
return 1
return fib(n-1) + fib(n-2)
fib(n)
#n=8
def fib(8):#所以fib(8)就是21
if n == 1 or n == 2:
return 1
return fib(8-1) + fib(8-2)#这里fib(7)+fib(6)最终return的结果是21
#请注意要从下往上看!!!!
# 此时需要把return fib(8-1)和fib(8-2)的函数分别求出return的值,然后相加就可以得到fib(8)的值
# 那么fib(8-1)就是fib(7),同理,fib(8-2)就是fib(6)
# 现在我们来分别求出fib(7)的值和fib(6)的值。其实很简单的,就是过程很麻烦重复很多遍,要不断的向下去求值。
# 要求fib(6)的值就把它放进上面的函数公式里即可一层层剥皮得到最下层的结果,再一层层加上来,就实现了递归。
# 开始执行:
def fib(7):#所以fib(7)就是13
if n == 1 or n == 2:
return 1
return fib(7-1)+fib(7-2)#这里fib(6)+fib(5)最终return的结果是13
def fib(6):#所以fib(6)就是8
if n == 1 or n == 2:
return 1
return fib(6-1)+fib(6-2)#这里fib(5)+fib(4)最终return的结果是8
def fib(5):#所以fib(5)就是5
if n == 1 or n == 2:
return 1
return fib(5-1)+fib(5-2)#这里fib(4)+fib(3)最终return的结果是5
def fib(4):#所以fib(4)就是3
if n == 1 or n == 2:
return 1
return fib(4-1)+fib(4-2)#这里fib(3)+fib(2)最终return的结果是3
def fib(3):#所以fib(3)就是2
if n == 1 or n == 2:
return 1
return fib(3-1)+fib(3-2) #这里fib(2)+fib(1)最终return的结果是2
def fib(2):
if n == 1 or n == 2:
return 1 #我们一层一层剥下来,这里就是最底层,现在开始向上一层一层相加
另一种实现方式
def fib():
a = 1
b = 2
while True:
c = a + b
yield c
a = c + b
yield a
b = a + c
yield b obj = fib()
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
三级菜单的递归函数:
menu = {
'北京': {
'海淀': {
'五道口': {
'soho': {},
'网易': {},
'google': {}
},
'中关村': {
'爱奇艺': {},
'汽车之家': {},
'youku': {},
},
'上地': {
'百度': {},
},
},
'昌平': {
'沙河': {
'老男孩': {},
'北航': {},
},
'天通苑': {},
'回龙观': {},
},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {
"人民广场": {
'炸鸡店': {}
}
},
'闸北': {
'火车战': {
'携程': {}
}
},
'浦东': {},
},
'山东': {},
} def menu_3(menu):
while True:
for key in menu:
print(key) #北京上海山东
choice = input('选择 : ') #北京
if choice == 'q' or choice == 'b':
return choice
elif choice in menu and menu[choice]: #北京 in menu
borq = menu_3(menu[choice])
if borq == 'q':
return 'q' menu_3(menu)
day15 函数的使用方法:递归函数的更多相关文章
- (MTT)连续能量函数最小化方法
(MTT)连续能量函数最小化方法 Multitarget tracking Multi-object tracking 连续能量函数 读"A.Milan,S. Roth, K. Schind ...
- jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法
jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法 在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们 ...
- PHP使用内置函数生成图片的方法详解
原文地址:http://www.poluoluo.com/jzxy/201605/475301.html 本文实例讲述了PHP使用内置函数生成图片的方法.分享给大家供大家参考,具体如下: 第一步:创建 ...
- JAVA 主函数(主方法)
主函数(主方法) 1.public (访问修饰符,公共的)代表该类或者该方法访问权限是最大的 2.static 代表主函数随着类的加载而加载 3.void 代表主函数没有具体的返回 ...
- 【转】Linux时间函数之gettimeofday()函数之使用方法
原文网址:http://blog.csdn.net/tigerjibo/article/details/7039434 一.gettimeofday()函数的使用方法: 1.简介: 在C语言中可以使用 ...
- objective-C学习笔记(四)函数成员:方法(函数)
函数分为: 全局函数(C语言函数) 成员函数(OBJC方法):实例方法 “-” 和类方法“+”的区别 //这里要区别静态变量(类变量).全局函数.常量的区别 OBJC里面,所有方法默认为公有方法.没 ...
- splice()函数的使用方法
splice()函数的使用方法,这是一个拗口的函数.用起来有点麻烦.图3所看到的是splice函数的功能.将一个列表插入到还有一个列表其中.list容器类定义了splice()函数的3个版本号: sp ...
- 模式识别 - libsvm该函数的调用方法 详细说明
libsvm该函数的调用方法 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26261173 须要载入(load)SVM ...
- 举例详解Python中的split()函数的使用方法
这篇文章主要介绍了举例详解Python中的split()函数的使用方法,split()函数的使用是Python学习当中的基础知识,通常用于将字符串切片并转换为列表,需要的朋友可以参考下 函数:sp ...
随机推荐
- ubuntu18.04安装xmind8
1.先去官网下载:https://www.xmind.net/download/xmind8/ 2.默认下载到/home/guojihai/下载/目录下然后把xmind-8-update8-linux ...
- CSS 三角形与圆形
1. 概述 1.1 说明 通过边框(border)的宽度与边框圆角(border-radius)来设置所需的三角形与圆形. 1.2 边框 宽高都为0时,边框设置的不同结果也不同,如下: 1.四个边框都 ...
- 17)django-模板的继承与导入
情况1:通常写页面都有个模板用来框定头部LOGO页面,左侧导航菜单,只有右部的内容不同.如果不使用模板就大量重复工作. 特别如果头部或者左侧导航需要修改或者添加,所有页面都需要修改.django 通过 ...
- 大数据mapreduce俩表join之python实现
二次排序 在Hadoop中,默认情况下是按照key进行排序,如果要按照value进行排序怎么办?即:对于同一个key,reduce函数接收到的value list是按照value排序的.这种应用需求在 ...
- Confluence 6 从你的 JDBC 连接中直接启用校验查询
确定 Confluence 在数据库连接池中校验数据库连接: 停止 Confluence. 编辑 <home-directory>confluence.cfg.xml 文件. 针对你特定的 ...
- Confluence 6 注册单一小工具
如果你不能订阅一个应用的小工具,你需要将小工具一个一个的添加进来.针对网站不支持小工具订阅和你的应用和你的 Confluence 不能建立信任连接的情况,你就只能这样添加了. 首先你需要获得小工具的 ...
- Exception类的学习与继承总结
日期:2018.11.11 星期日 博客期:023 Exception类的学习与继承总结 说起来我们上课还是说过的!老师提到了报错问题出现主要分Exception和Error两类!第一次遇见这个问题是 ...
- CommonJs、AMD、CMD模块化规范
/** * CommonJS 模块化规范 * CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作 */ /*-------Node.js遵循Commonjs规范----- ...
- vue-cli脚手架(框架)
一.创建vue项目 npm install vue-cli -g #-g全局 (sudo)npm install vue-cli -g #mac笔记本 vue-init webpack myvue # ...
- 【ES】学习10-聚合3
聚合是在查询匹配的文档中做统计的 不指定查询语句时,从所有文档中匹配. 下面两个语句等价: GET /cars/transactions/_search { , "aggs" : ...