计算阶乘-递归-循环-公式
1.写一个计算阶乘的函数,用不同的方式实现
# -*- coding: utf-8 -*-
# @Author : Codeooo
# @Time : 2020/01/15
"""
1.写一个计算阶乘的函数,用不同的方式实现
"""
def factorial(number):
count = 1
if number < 0:
print('负数没有阶乘!')
elif number == 0:
print('0的阶乘为1!')
else:
for i in range(1, number + 1):
count *= i
return count
print(factorial(6))
def factorialSeries(number):
if number == 0:
return 1
else:
return number * factorialSeries(number - 1)
print(factorialSeries(6))
2.一个人上台阶,一次可以走一步或者两步,上完100个台阶的走法有多少种
# -*- coding: utf-8 -*-
# @Author : Codeooo
# @Time : 2020/01/15
"""
2.一个人上台阶,一次可以走一步或者两步,上完100个台阶的走法有多少种
"""
# 解法一:递归思想
# 如果当前跳了一阶,还剩余n-1阶
# 如果当前跳了两阶,还剩余n-2阶
# 分别对n-1阶与n-2阶求次数,再相加
# def jumpFloor(number):
# if number in (1, 2):
# return number
# return jumpFloor(number - 1) + jumpFloor(number - 2)
#
# print(jumpFloor(100))
# 解法二:循环实现,避免阶数过大造成时间超限
def jumpFloor(number):
if number == 1 or number == 2:
return number
n, m = 1, 2
for i in range(number - 2):
result = m + n
n, m = m, result
return result
print(jumpFloor(100))
# 解法三:公式
# 设n级台阶,跳了z次,x次跳一阶,y次跳两阶。
# >>> z = x + y
# >>> n = 2*x + y
# @param {integer} n
# @return {integer}
def climbStairs(n):
def fact(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
total = 0
# for i in range(n/2+1): # float不能作为range的参数
for i in range(n // 2 + 1):
total += fact(i + n - 2 * i) / fact(i) / fact(n - 2 * i)
return total
print(climbStairs(100))
还没有评论,来说两句吧...