一、二分查找

二分查找也称之为折半查找,二分查找要求线性表(存储结构)必须采用顺序存储结构,而且表中元素顺序排列。

二分查找:

1.首先,将表中间位置的元素与被查找元素比较,如果两者相等,查找结束,否则利用中间位置将表分成前、后两个子表。

2.如果中间位置元素<被查找元素,则开始位置 = 中间位置,结束位置 = 表的长度-1

3.如果中间位置元素>被查找元素,则开始位置=0,结束位置=中间位置

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,start= 0,end=None):
if end == None:end = len(l) - 1
if start <= end:
mid = (end + start) // 2 #12 18
if l[mid] < aim:
return func(l,aim,start = mid + 1,end = end) # [42,43,55,56,66,67,69,72,76,82,83,88]
elif l[mid] > aim:
return func(l,aim,start = start,end = mid - 1)
elif l[mid] == aim:
return mid
else:
return None
func(l,66)

二、斐波那契数列

斐波那契数列又称黄金分割数列,是指1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... 。这个数列从第3项开始,每一项都得等于前两项的和。

1)比较占内存

def fib(n):
if n <= 1:
return 1
else:
return fib(n - 1) + fib(n - 2)

2)比较推荐

def fib(n,a=0,b=1):
if n == 1 or n == 2:
print(b)
return a + b
else:
print(b)
return fib(n-1,b,a+b)
#1 1 2 3 5 8 13
ret = fib(5)
print(ret)

三、三级菜单

1.遍历一级的key

2.根据输入判断是否key存在

3.如果key存在,递归再打印

4.如果输入是b,只是中断本次函数,返回上层函数

5.如果输入是q,不断的向上返回。

 area = {
'山东省':{'济南市':{'市中区','历下区','天桥区'},'青岛市':{'即墨市','胶州市','平度市'},'菏泽市':{'牡丹区','单县','曹县'}},
'河北省':{'石家庄市':{'高邑县','深泽县','新乐县'},'唐山市':{'乐亭县','迁西县','唐海县'},'秦皇岛市':{'昌黎县','抚宁县','卢龙县'}},
'广东省':{'广州市':{'南沙区','黄浦区','海珠区'},'深圳市':{'罗湖区','南山区','盐田区'},'珠海市':{'香洲区','斗门区','金湾区'}}
} def func(dic): while True:
for key in dic:
print(key)
content = input('>>>')
if content in dic and dic[content]:
ret = func(dic[content])
if ret == 'q':return ret
elif content == 'b' or content == 'q':
return content func(area)
print('之后的操作.....')

Python递归 — — 二分查找、斐波那契数列、三级菜单的更多相关文章

  1. Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)

    Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...

  2. 算法之路(三)----查找斐波纳契数列中第 N 个数

    算法题目 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: * 前2个数是 0 和 1 . * 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, 1 ...

  3. 算法 递归 迭代 动态规划 斐波那契数列 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. Python基础(二):斐波那契数列、模拟cp操作、生成8位随机密码

    一.斐波那契数列 目标: 编写fib.py脚本,主要要求如下: 输出具有10个数字的斐波那契数列 使用for循环和range函数完成 改进程序,要求用户输入一个数字,可以生成用户需要长度的斐波那契数列 ...

  5. Python3基础 函数 递归 阶乘与斐波那契数列

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. python基础练习题(斐波那契数列)

    day4 --------------------------------------------------------------- 实例006:斐波那契数列 题目 斐波那契数列. 题目没说清楚, ...

  7. python学习笔记之斐波拉契数列学习

    著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 如果用Python的列表生成式, ...

  8. Count and Say,统计并输出,利用递归,和斐波那契数列原理一样。

    问题描述:n=1,返回“1”:n=2,返回“11”:n=3,返回“21”:n=4,返回1211,.... 算法分析:和斐波那契数列道理差不多,都是后一个要依赖前一个元素.因此可以使用递归,也可以使用迭 ...

  9. 剑指offer 7. 递归和循环 斐波那契数列

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 简简单单 废话不多说,直接上代码: public class Sol ...

  10. python的生成器(斐波拉契数列(Fibonacci))

    代码: 函数版本: #斐波拉契数列(Fibonacci) def fib(max): n=0 a,b=0,1 while n < max: a,b = b,a+b n = n+1 return ...

随机推荐

  1. 程序猿必备技能:数据库管理——关于MySQL

    一.初识MySQL 1.什么是数据库? 数据库(Database,DB)简而言之就是存放数据的仓库,是为了实现一定目的,按照某种规则组织起来的数据的集合. 2.使用数据库的必要性 (1)结构化存储大量 ...

  2. BZOJ3747 POI2015Kinoman(线段树)

    考虑固定左端点,求出该情况下能获得的最大值.于是每次可以在某数第一次出现的位置加上其价值,第二次出现的位置减掉其价值,查询前缀最大值就可以了.每次移动左端点在线段树上更新即可. #include< ...

  3. 【BZOJ4184】shallot(线段树分治,线性基)

    [BZOJ4184]shallot(线段树分治,线性基) 题面 权限题啊.....好烦.. Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把 ...

  4. ZOJ3899 State Reversing 【线段树 + NTT】

    题目链接 ZOJ3899 题解 比较累,做一道水题 还被卡常= = 我在\(ZOJ\)交过的两道\(NTT\)都被卡常了.. 哦,题意就是求第二类斯特林数,然后线段树维护一下集合数量就可以了 #inc ...

  5. linux设置开机自动启动

    有很多中方法,这里只取最简单的一种: 把启动命令放到/etc/rc.d/rc.local文件里这样就可以每次启动的时候自动启动服务了, 注意给rc.local执行权限

  6. 【bzoj2893】征服王

    Portal -->bzoj2893 Descripiton 给你一个\(n\)个点\(m\)条边的有向图,有一些点是起始点,有一些点是终止点,一次操作可以从一个起始点开始沿着有向图的边走到一个 ...

  7. 《剑指offer》— JavaScript(6)旋转数组的最小数字

    旋转数组的最小数字 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2, ...

  8. CentOS 7网络故障

    By francis_hao    Nov 2,2017   在像往常一样打开了虚拟机后,打开xshell准备连接到centos,可是连不上,发现连接的网卡没有启动,使用systemctl启动netw ...

  9. Redundant data in update statements

    Q:   Hibernate generates UPDATE statements, which include all columns, regardless of whether I'm cha ...

  10. C语言 结构体作为参数和返回值使用

    方案一:结构体变量作为参数,进行传值. 编译器需要拷贝,不影响origin value,使用成员操作符(.)直接访问 /**************************************** ...