122Ml 发表于 2023-9-22 20:41:23

关于Python青蛙跳台阶问题.2

# -*- 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?

以及该递归的思路?

isdkz 发表于 2023-9-22 20:41:31

参数a和b的初始值分别为0和1是因为在递归过程中,需要用到a和b的和,而a和b的和初始值为1,所以将a设置为0,b设置为1,方便递归的计算。

该递归的思路是将问题分解为子问题,将跳上n级台阶的方法数分解为跳上n-1级台阶的方法数和跳上n-2级台阶的方法数的和。使用递归的方式,将问题不断分解为子问题,直到问题规模缩小到0或1或2,然后返回相应的结果。在递归的过程中,使用a和b两个参数分别记录前两次递归的结果,方便计算当前递归所需要的值。这样可以避免重复计算,提高算法效率。
页: [1]
查看完整版本: 关于Python青蛙跳台阶问题.2