#! /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)
# -*- 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)