马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
# -*- coding:utf-8 -*-
import time
def jumpFloor(number):
if number == 0:
return 0
if number == 1:
return 1
if number == 2:
return 2
return solute(number, 0, 1)
def solute(number, a, b):
if number == 0:
return b
return solute(number-1, b, a+b)
if __name__ == '__main__':
starttime = time.time()
print(jumpFloor(400))
print('耗时:' + str(time.time() - starttime))
以上是青蛙跳台阶问题的尾递归算法,我想问问 return solute(number, 0, 1)
中参数a和b为什么要设置成0和1?
以及该递归的思路?
参数a和b的初始值分别为0和1是因为在递归过程中,需要用到a和b的和,而a和b的和初始值为1,所以将a设置为0,b设置为1,方便递归的计算。
该递归的思路是将问题分解为子问题,将跳上n级台阶的方法数分解为跳上n-1级台阶的方法数和跳上n-2级台阶的方法数的和。使用递归的方式,将问题不断分解为子问题,直到问题规模缩小到0或1或2,然后返回相应的结果。在递归的过程中,使用a和b两个参数分别记录前两次递归的结果,方便计算当前递归所需要的值。这样可以避免重复计算,提高算法效率。
|