递归操作其实用处还挺广泛的,个人认为在秋招中也属于面试官常考问题之一。列举几个经典的例子来帮助自己理解一下递归这个牛13的操作。最近才搞懂一点点。
example-1: 实现的阶乘。
这个题如果不知道的递归的我来写,肯定是要写for循环。但是用递归的话其实就很简单了。(递归中要重点考虑终止条件)
def jiecheng(n):
if n==1:
return 1
return n*jiecheng(n-1)
example-2:求整数n的幂
class Solution:
def myPow(self, x: float, n: int) -> float:
if n < 0:
x = 1/x
n = -n
if n == 0:
return 1
if n == 1:
return x
if n % 2 == 0:
return self.myPow(x, n/2)**2
else:
return self.myPow(x, n-1) * x
example-3:二叉树反转
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if not root:
return root
node = root
#print(node)
if node:
node.left, node.right = node.right, node.left
self.invertTree(node.left)
self.invertTree(node.right)
return root
example-4:斐波那契数列(爬楼梯)
斐波那契数列是指当前位数位前两位数之和,例如[1,2,3,5,8,13...],求第n位斐波那契数。
#digui#
def feibonaqi(n):
if n == 1 or n ==2:
return 1
else:
return feibonaqi(n-1)+feibonaqi(n-2)
#feidigui_1#
def geibonaqi(n):
res=[0,1]
while len(res)<n+1:
res.append(res[-1]+res[-2])
return res[n]
#feidigui_2#
def feibonaqi(n):
a=0
b=1
res=[]
while b<10000:
res.append(b)
a,b = b,a+b
return res