递归算法的两个个条件
1.递归条件
2.终止条件
递归算法的优缺点
1、代码更简洁清晰,可读性更好;
2、时间和空间消耗比较大;
3、很多计算都是重复的;
4、调用栈可能会溢出。
题目
力扣70题:
方案一(能运行,但是过不了力扣的标准,时间过了)
class Solution(object):
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
if n == 0 or n == 1: # 当只有0阶或一阶台阶时返回1
return 1
else: # 当n>=2时调用ClimbStairs函数,来构造公式W(n)=W(n-1)+W(n-2)
return self.climbStairs(n-1) + self.climbStairs(n-2)
if __name__ == '__main__':
ins=Solution()
n = int(input('enter n:')) # input获取的n为字符串需要用int()转换成数值
way = ins.climbStairs(n)
print(way)
当n=45的时候超出时间限制
方案二,参考Python每日一练--------递归,动态规划(爬楼梯)_亖夕的博客-CSDN博客_python用递归实现上楼梯
class Solution(object):
def climbStairs(self, n):
"""
:type n: int
:rtype: int
"""
# if n == 0 or n == 1: # 当只有0阶或一阶台阶时返回1
# return 1
# else: # 当n>=2时调用ClimbStairs函数,来构造公式W(n)=W(n-1)+W(n-2)
# return self.climbStairs(n-1) + self.climbStairs(n-2)
a = b = 1
for i in range(2, n + 1):
a, b = b, a + b
return b
# if __name__ == '__main__':
# ins=Solution()
# n = int(input('enter n:')) # input获取的n为字符串需要用int()转换成数值
# way = ins.climbStairs(n)
# print(way)