2019.1.7 递归,迭代相关内容
1 #匿名函数 2 #匿名函数与普通函数在使用上的区别 3 #使用匿名函数的优势:lambda使用代码精简,不用考虑命名的问题,简化代码的可读性 4 lambda x:2*x+1 5 g=lambda x:2*x+1 #这就是匿名函数 6 b=g(5) 7 print (b) 8 9 lambda x,y:x+y 10 g=lambda x,y:x+y 11 b=g(5,8) 12 print (b) 13 14 #两个牛逼的BIF 15 #1.filter()过滤器:对sequence中的item依次执行,function(item),将执行结果为True(!=0) 16 #的item组成一个 List/String/Tuple(取决于sequence的类型)返回,false则退出(0), 17 #进行过滤。 18 a=filter(None,[1,0,3.15,8,9,True,False,"中国"]) 19 b=list(a) 20 print(b) #fileter 函数把它的内容进行过滤,把不为空,不为假的内容留下来。 21 22 #奇数的输出 23 def odd(x): 24 return x %2 25 temp=range(10) 26 show=filter(odd,temp) 27 print(list(show)) 28 29 b=list(filter(lambda x:x %2 ,range(20))) 30 print(b) 31 #输出偶数 32 b=list(filter(lambda x:x %2==0 ,range(20))) 33 print(b) 34 35 def testmod(x): 36 for r in range(1,x): 37 if r%2==0: 38 print(r,end=" ") 39 print(testmod(30)) 40 41 #map()映射:对sequence中的iterm 依次执行function(item) 42 #执行结果输出为list 43 44 b=list(map(lambda x:x * 2 ,range(10))) #map为映射 45 print(b) 46 47 48 #汉诺塔游戏 49 #谢尔宾斯基三角形 50 #递归:程序调用自身的编程技巧称为递归(recursion)。一个过程或函数在其定义或说明 51 #中有直接或间接调用自身的一种方法,它通常把一个大型复杂问题层层转化为一个与原 52 #问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需 53 #的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象 54 #的无限集合。一般来说,递归需要有边界条件,递归前时段和递归返回段。当边界条件不 55 #满足时,递归前进,当边界条件满足时,递归返回。 56 #构成递归需具备的条件: 57 #子问题须与原始问题为同样的事,且更为简单 58 #不能无限制地调用本身,须有个出口,化简为非递归状况处理。 59 #递归可使用 CTR+C 强制停止 60 # import sys 61 # sys.setrecursionlimit(100) 设置递归的深度为100 62 63 #写一个阶乘的函数 从1连乘到n ,改变下运算符号,也可连加。 64 def factorial(n): 65 result=n 66 for i in range(1,n): 67 result *=i 68 return result #这个返回,老是忘了和for 对齐。 69 number=int(input("请输入一个正整数:")) 70 result=factorial(number) 71 print("%d的阶乘是:%d" %(number,result)) 72 73 #用递归的方法如下: 74 def factorial(n): 75 if n==1: 76 return 1 77 else: 78 return n*factorial(n-1) 79 80 number=int(input("请输入一个正整数:")) 81 result=factorial(number) 82 print("%d的阶乘是:%d" %(number,result)) 83 84 #斐波那契数列(Fibonacci) 0,1,1,2,3,5,8,13,21,34,55,89,144 85 86 87 #题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, 88 #小兔子长到第三个月后每个月又生一对兔子, 89 #假如兔子都不死,问每个月的兔子总数为多少? 90 month=input("请输入月份:") 91 if month.isdigit(): 92 month=int(month) 93 a=0 94 b=1 95 for i in range(month-1): 96 a,b=b,a+b 97 print("%d月份以后兔子有%d对"%(month,b)) 98 else: 99 print("输入有误请重新输入")