Python3使用递归求斐波那契数列

1. 递归函数

递归函数就是在函数中调用它自身,其主要用于将复杂问题分解为多个子问题,然后再对子问题进行拆分,分解成更小的问题,直到不能再拆分为止。
为了防止递归函数无休止地进行,必须在函数内有终止条件。

2. 递归函数的最大深度

在Python中递归函数的最大深度是997

def func(n):
    print(n)
    n += 1
    func(n)
func(1)

3. 重置递归函数的最大深度

import sys
 
print(sys.setrecursionlimit(2000))
 
def func(n):
    print(n)
    n += 1
    func(n)
func(1)

4. 递归函数示例

4.1 计算阶乘 n!

'''
分析:
n! = 1*2*3*4*....(n-2)*(n-1)*n
我们使用函数 fact(n) 来表示n! ,即 fact(n) = n!
n!     = 1*2*3*4*....(n-2)*(n-1)*n  = fact(n)
(n-1)! = 1*2*3*4*....(n-2)*(n-1)    = fact(n-1)
可以推导出:
n! = fact(n-1) * n
同理,fact(n-1) = fact(n-2)*(n-1)
......
直到 n=1 即 1! = 1 的时候不再进行分解;
'''

def fact(n):
  if n == 1:
    return 1
  return n*fact(n-1)
 
print(fact(5))   # 120

'''
5! 执行过程如下:
5*fact(4)
5*(4*fact(3))
5*(4*(3*fact(2)))
5*(4*(3*(2*fact(1))))
5*(4*(3*(2*1)))
'''

4.2. 斐波纳契数列

斐波纳契数列:1,1,2,3,5,8,13…(该数列中,有n个数字,从第三个数字开始:数值 =前第一个数字 + 前面第二个数字)即:n=(n-2)+(n-1)

# 1,1,2,3,5,8,13,21,34,55,......
def Fibonacci(n):
  if n== 1 or n == 2:
    return 1
  else:
    return Fibonacci(n-1) + Fibonacci(n-2)
 
print(Fibonacci(9))

4.3. 求x的n次方

# 求x的n次方(n大于等于0),即n个x相乘
def func(x,n):
  if n == 0:
    return 1
  else:
    return func(x,n-1) * x
 
print(func(3,10))

4.4 递归求斐波那契数列

以下代码使用递归的方式来生成斐波那契数列:

def recur_fibo(n):
   """递归函数
   输出斐波那契数列"""
   if n <= 1:
       return n
   else:
       return(recur_fibo(n-1) + recur_fibo(n-2))
 
 
# 获取用户输入
nterms = int(input("您要输出几项? "))
 
# 检查输入的数字是否正确
if nterms <= 0:
   print("输入正数")
else:
   print("斐波那契数列:")
   for i in range(nterms):
       print(recur_fibo(i))

执行以上代码输出结果为:

您要输出几项? 10
斐波那契数列:
0
1
1
2
3
5
8
13
21
34
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【问描述】 【问描述】编写函数f,功能是用递归的方法斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问描述】编写函数f,功能是用递归的方法斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问描述】编写函数f,功能是用递归的方法斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问描述】编写函数f,功能是用递归的方法斐波那契数列的第n项,函数原型为 int f(int n),在主函数中输入一个正整数n,调用函数f斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zeal.Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值