python 递归和二分法

Posted small_caier

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 递归和二分法相关的知识,希望对你有一定的参考价值。

一 内置函数

  1. revserd 翻转,返回的是迭代器

# 将 s 倒置
s = 不是上海自来水来自海上
# 方法一
print(s[::-1])
# 方法二
s1 = reversed(s)
i = ‘‘
for el in s1:
  i +=el
  print(i)

  2.slice 切片

lis = [nishi,woshi,shuia,benjim]
s = slice(1,3)
print(lis[s])

  3.formate

# 格式化输出
s = "我叫{name},我想去{adress},我喜欢{hobby}.".format(name=zhangmeng,adress=上海,hobby=dance)
print(s)


# 字符串
print(format(test, <20)) # 左对齐
print(format(test, >20)) # 右对齐
print(format(test, ^20)) # 居中
# 数值
print(format(3, b)) # 二进制
print(format(97, c)) # 转换成unicode字符
print(format(11, d)) # 十进制
print(format(11, o)) # 八进制
print(format(11, x)) # 十六进制(小写字母)
print(format(11, X)) # 十六进制(大写字母)
print(format(11, n)) # 和d一样
print(format(11)) # 和d一样
# 浮点数
print(format(123456789, e)) # 科学计数法. 默认保留6位小数
print(format(123456789, 0.2e)) # 科学计数法. 保留2位小数(小写)
print(format(123456789, 0.2E)) # 科学计数法. 保留2位小数(大写)
print(format(1.23456789, f)) # 小数点计数法. 保留6位小数
print(format(1.23456789, 0.2f)) # 小数点计数法. 保留2位小数
print(format(1.23456789, 0.10f)) # 小数点计数法. 保留10位小数
print(format(1.23456789e+10000, F)) # 小数点计数法.

  4. type() 返回类型    ord()  输入字符找字符编码的位置     chr()  输入位置找出对应的字符    ascii()判断给出的信息是否是ascii 

for i in range(65536):
    print(chr(i), end="")

二. 递归

  函数自己调用自己,递归的入口(参数)  和 出口(return)

语法:

def func():
    print(我是递归)
    func()

func() # 官方显示最多到1000.但不会跑到1000,实际到998
# 树形结构的遍历

import os
def func(lujing, n):
    lis = os.listdir(lujing) # 打开文件夹,列出文件夹内的所有文件名
    for el in lis: # el 为文件的名字
    # 还原文件路径
    path = os.path.join(lujing,el)
    if os.path.isdir(path):# 判断路径是否是文件夹
        print(* * n,el) # 显示文件夹的名字
        func(path, n+1) # 再来一次
    else:
        print(/t*n,el) # 显示文件

func(f:/a, 0)
import os
def func(lujing, n):
    lis = os.listdir(lujing ) # 打开文件夹,列出文件夹内的所有文件名
    for el in lis: # el为文件名
# 还原文件的路径
    path = os.path.join(lujing, el)
    if os.path.isdir(path): # 判断路径是否是文件夹
        print(** n, el) # 显示文件夹名称
        func(path, n+1) # 再来一次
    else:
        with open(path,mode=wb) as f: # 打开文件,都写入内容
            f.write(b123456)
              print(/t*n, el) # 显示文件
func(F:/a,0)

三. 二分法

  掐头结尾取中间,查找效率非常高,二分法查找的主要作用就是查找元素
# 二分法查找
lst = [1,4,6,7,9,21,23,45,67,87,65,43,89]
n = int(input(请输入一个数:))
lst = sorted(lst)
# print(lst)
left = 0
right = len(lst)-1
while left <= right:
    mid = (left + right)//2
    if n > lst[mid]:
        left = mid+1
    elif n < lst[mid]:
        right = mid -1
     else:
        print("存在")
        break
else:
print(不存在)
# 递归 切割列表

def func(n,lst):
    left = 0
    right = len(lst)-1
    if lst != []:
        mid = (left+right)//2
         if n>lst[mid]:
            func(n,lst[mid+1:])
        elif n < lst[mid]:
            func(n,lst[:mid])
        else:
            print("找到了")
            return
    else:
        print("没找到")
        return

n = int(input(请输入你要查找的数:))
lst = [1,4,6,7,9,21,23,45,67,87,65,43,89]


func(n,lst)
# 递归2
def func(n,lst,left,right): # 递归找到什么是可变的,什么是不可变的
    if left <= right:
        mid = (left+right)//2
            if n > lst[mid]:
                left = mid+1
                return func(n,lst,left,right)
            elif n < lst[mid]:
                right = mid - 1
                return func(n, lst, left, right)
            else:
                print(找到了)
                return mid # 难点
    else:
        print(找不到)
        return -1

n = int(input(请输入你要查找的数:))
lst = [13,45,56,67,78,57,89,101]
ret = func(n,lst,0,len(lst)-1)
print(ret)
# 最快的查找方法

lst = [13,45,56,57,67,78,89,101]

# 找出最大的数
new_lst = []
for i in range(99):
    new_lst.append(0)

for i in lst:
    new_lst[i] = 1

i = int(input(请输入你要找的数据:))
if new_lst[i] == 0:
    print(不存在)
else:
    print(存在)

 

以上是关于python 递归和二分法的主要内容,如果未能解决你的问题,请参考以下文章

python 递归和二分法查找

python 递归和二分法

python--递归, 二分法

python 3 递归调用与二分法

python递归函数及二分法查找

python--函数之递归与二分法