python实现递归算法

#! /usr/bin/env python
# -*- coding: utf-8 -*-


def recursive_1(n):
    """
    楼梯有n阶台阶,上楼可以一步上3阶,也可以一步上5阶,
    计算共有多少种不同的走法?
    设n阶台阶的走法数为f(n)。如果台阶数小于等于3,走法有2种(一步上3个台阶或者5个台阶),
    即f(n<=3) = 2;如果台阶数为4或者5,走法有3种((3,3), (3,5), 5),即f(n==4 or n==5) = 3;
    当有n个台阶(n>5)时,我们缩小问题规模,可以这样想:最后是一步上3个台阶的话,之前上了
    n-3个台阶,走法为f(n-3)种,而最后是一步上5个台阶的话,之前上了n-5个台阶,走法为f(n-5)
    种,故而f(n) = f(n-3) + f(n-5)
    """
    if n <= 3:
        return 2
    elif n in (4, 5):
        return 3
    else:
        return recursive_1(n-3) + recursive_1(n-5)


if __name__ == "__main__":
    for i in xrange(20):
        print i, recursive_1(i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值