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)

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

 

转载于:https://www.cnblogs.com/tianlinger/p/8399891.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值