pythond 递归之找数字游戏

函数递归(用在你不知道要循环多少次)
1.必须有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归的层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧,由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

#有五个人,他们的岁数是递减2岁,到第五个人的时候是10岁,问你第一个人多少岁
def age(n):
    if n==1:
        return 10
    else:
        return age(n-1)+2
print(age(5))

输入一个数字,在已有的列表列面查询是否有这个数字。注:代码是在python3.0所编写。
二分法实例1、 data
=[1,3,5,6,7,8,11,14,16,18,23,33,37,39,42,47,50] def search(num,data): if len(data)>1: m = int(len(data) / 2) if num<data[m]: print('在%s左边'%data[m]) data = data[:m] search(num,data) elif num>data[m]: print('在%s右边'%data[m]) data = data[m:] search(num,data) else: print('找到了%s'%data[m]) return else: if data[0]==num: print("找到了") else: print('没有找到') search(1,data) 二分法实例2、 import random tuple_a = [(10,15),(16,23),(25,29),(30,35),(37,42),(50,60),(61,65),(70,80),(81,85),(90,100)] b = random.randrange(100) print("Num:",b) def search_index(b,tuple_pre): min_index = 0 max_index = len(tuple_pre) - 1 if b < tuple_pre[min_index][0] or b > tuple_pre[max_index][1]:return "Not Found!" while True: center_index = int((max_index + min_index) / 2) front_tuple = tuple_pre[center_index -1] print('-->',front_tuple) if b >= tuple_pre[center_index][0] and b <= tuple_pre[center_index][1]: return "Index:%s\nRange:%s"%(center_index,tuple_pre[center_index]) elif b < tuple_pre[center_index][0]: if b > front_tuple[1]:return "Not Found!" max_index = center_index - 1 elif b > tuple_pre[center_index][1]: if b<tuple_a[center_index+1][0]:return 'No Found' min_index = center_index + 1 res = search_index(b,tuple_a) print(res)

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!
不会修改状态,精简,结果唯一!

 

posted @ 2018-02-01 16:49  曾小燕  阅读(272)  评论(0编辑  收藏  举报