6、第六种方法
代码:
def fact(n): if n == 1: return 1 return n*fact(n-1) if __name__ == '__main__': while True: n=int(input("请输入要求的阶乘数:")) print("您所求阶乘数为:"+str(fact(n)))
效果:
解析:此方法运用函数的自递归来完成运算。
二、斐波那契数列
数学家莱昂纳多·斐那契(Leonardo Fibonacci)以兔子繁殖为例子引入了数列0、1、1、2、3、5、8、13、21、34...,称为斐波那契数列(Fibonacci sequence),又称“黄金分割数列”或者“兔子数列”。使用函数递归或非递归的方式都可以方便地计算斐波那契函数:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2)
1、第一种方法
代码:
def fibonacci(n): from math import pow, sqrt return int(1/sqrt(5)*(pow((1+sqrt(5))/2, n)-pow((1-sqrt(5))/2, n))) if __name__ == '__main__': while True: n=int(input("请输入要求的斐波那契数:")) print("您所求斐波那契数数列为:"+str(fibonacci(n)))
效果:
解析:使用平方根与幂运算然后取整算出对应斐波那契数
2、第二种方法
代码:
def fibonacci(n): if n == 1 or n == 2: return 1 return fibonacci(n-1) + fibonacci(n-2) if __name__ == '__main__': while True: n=int(input("请输入要求的斐波那契数:")) print("您所求斐波那契数数列为:"+str(fibonacci(n)))
效果:
解析:通过循环调用然后再计算累计值。
3、第三种方法
代码:
def fibonacci_inner(n, m, r0, r1): if m == n: return r1 return fibonacci_inner(n, m+1, r1, r0+r1) def fibonacci(n): return fibonacci_inner(n, 2, 1, 1) if __name__ == '__main__': while True: n=int(input("请输入要求的斐波那契数:")) print("您所求斐波那契数数列为:"+str(fibonacci(n)))
效果:
解析:此方法与上面一种差异不大,只是将每次计算值用r来保存起来