递归定义函数
递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,再也不调用。spa
咱们如今开始来举例子,而后总结如何写好递归程序。(这种针对能够找出数学表达式的递归程序,对于写不出数学表达式的或者很差找的会在以后的博客中补充)3d
例子1: n的阶乘。code
咱们先来写出数学表达式blog
代码部分:递归
1 __author__ = "WSX" 2 3 def f(n): 4 if n == 1: 5 return 1 6 else: 7 return f(n-1) * n 8 9 print(f(3))
例子 2: 斐波那契数列get
咱们仍是来写数学表达式,嘿嘿。博客
相应代码:数学
1 __author__ = "WSX" 2 def fib(n): 3 if n == 1: 4 return 1 5 if n == 2: 6 return 1 7 if n>2: 8 return fib(n-2) + fib(n-1) 9 print(fib(4))
例子3 :求最大公约数class
老样子,先写数学表达式。是否是感受没啥难度了(能够用数学表达出来的)
return 就是等号 !!!
代码:
1 __author__ = "WSX" 2 3 def gcb(a, b): 4 if a%b == 0: 5 return b 6 else: 7 return gcb(b, a%b)
到了这里是否是对于这种类型的递归已经能十分简单的写出来了? 咱们在看一个稍微高级一点点的例子
例子4: 二分查找
写表达式,你会想这个表达式怎么写??? 下面咱们来看。
代码:
1 __author__ = "WSX" 2 3 def s(L , left , right , target): 4 mid = (left + right) // 2 5 if target == L[mid]: 6 return mid 7 if left > right: 8 return None 9 if target > L[mid]: 10 return s(L,mid+1 , right,target) 11 else: 12 return s(L, left, mid-1, target) 13 L = [3,5,7,8,55,88] 14 print(s(L, 0 ,len(L),88))
我总结的经验是:
① 肯定须要递归的参数
② 写出递归的表达式(必定找到出口) 就是结束的条件
③ 将表达式转化为代码(函数名 = 表达式左侧 函数内部 = 表达式右侧 return = 等号)