这里归纳的知识点主要就是:

浮点数,复数,

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 函数的使用方法:递归函数的更多相关文章

  1. (MTT)连续能量函数最小化方法

    (MTT)连续能量函数最小化方法 Multitarget tracking Multi-object tracking 连续能量函数 读"A.Milan,S. Roth, K. Schind ...

  2. jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法

    jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法   在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们 ...

  3. PHP使用内置函数生成图片的方法详解

    原文地址:http://www.poluoluo.com/jzxy/201605/475301.html 本文实例讲述了PHP使用内置函数生成图片的方法.分享给大家供大家参考,具体如下: 第一步:创建 ...

  4. JAVA 主函数(主方法)

    主函数(主方法) 1.public     (访问修饰符,公共的)代表该类或者该方法访问权限是最大的 2.static    代表主函数随着类的加载而加载 3.void    代表主函数没有具体的返回 ...

  5. 【转】Linux时间函数之gettimeofday()函数之使用方法

    原文网址:http://blog.csdn.net/tigerjibo/article/details/7039434 一.gettimeofday()函数的使用方法: 1.简介: 在C语言中可以使用 ...

  6. objective-C学习笔记(四)函数成员:方法(函数)

    函数分为:  全局函数(C语言函数) 成员函数(OBJC方法):实例方法 “-” 和类方法“+”的区别 //这里要区别静态变量(类变量).全局函数.常量的区别 OBJC里面,所有方法默认为公有方法.没 ...

  7. splice()函数的使用方法

    splice()函数的使用方法,这是一个拗口的函数.用起来有点麻烦.图3所看到的是splice函数的功能.将一个列表插入到还有一个列表其中.list容器类定义了splice()函数的3个版本号: sp ...

  8. 模式识别 - libsvm该函数的调用方法 详细说明

    libsvm该函数的调用方法 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26261173 须要载入(load)SVM ...

  9. 举例详解Python中的split()函数的使用方法

    这篇文章主要介绍了举例详解Python中的split()函数的使用方法,split()函数的使用是Python学习当中的基础知识,通常用于将字符串切片并转换为列表,需要的朋友可以参考下   函数:sp ...

随机推荐

  1. linux杀死僵尸进程

    用下面的命令找出僵死进程 ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]' 命令注解: -A 参数列出所有进程 -o 自定义输出字段 我们设定显示字段为 sta ...

  2. centos6.5安装python2.7、pip、numpy、scipy

    1..安装Development Tools yum groupinstall -y 'development tools' 2.安装SSL.bz2.zlib来为Python的安装做好准备工作 yum ...

  3. Java 调用翻译软件实现英文文档翻译

    前言: 因最近要进行OCP的考试准备.看着大堆英文文档确实有些疼痛.又因文档内容有点大,又需要逐一去翻译 又很费时费力.于是 百度了一番,找到一些 可以使用Java来调用百度翻译软件的API( 注:( ...

  4. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  5. Confluence 6 为外部用户管理获得支持

    本页面描述了如果你在配置外部用户管理的时候遇到了问题,如何向 Atlassian 支持项目组寻求帮助.外部用户目录挂你包括 Active Directory,其他 LDAP 服务器,Atlassian ...

  6. Java基本语法(一)

    一.标识符 (1)标识符就是在编写程序时给类,变量,方法等起的名字 (2)标识符的命名规则:标识符由字母,数字,下划线和$组成;第一个字符不能是数字;不能与关键字重名 二.关键字 定义:也称保留字,是 ...

  7. Java 输入一组数字,用穷举的方法列出

    import java.util.Scanner; public class TestScanner { public static void main(String[] args) { Scanne ...

  8. Caffe和py-faster-rcnn日常使用备忘录

    罗列日常使用中遇到的问题和解决办法.包括: { caffe使用中的疑惑和解释: 无法正常执行 train/inference 的情况: Caffe基础工具的微小调整,比如绘loss曲线图: 调试pyt ...

  9. 拒绝频繁IP访问--转载

    //首先我们要实现 IHttpModule接口 using System; using System.Collections.Generic; using System.Text; using Sys ...

  10. C# 合并两张图片

    private BitmapSource CombineImage(BitmapSource img1,BitmapSource img2) { var composeImg = new Render ...