鱼C论坛

 找回密码
 立即注册
查看: 3940|回复: 1

[技术交流] 《零基础入门学习Python》笔记 023讲 递归-小兔崽子

[复制链接]
发表于 2017-6-23 10:41:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
解决著名的斐波那契数列问题:用迭代和递归两种方法

0. 数学描述 为一个分段函数
     
                    1                         n=1
     F(n)=      1                         n=2
                     F(n-1)+F(n-2)   n>2

1.  迭代法实现(跟小甲鱼实现方法不同)
# 这帮小兔崽子 迭代实现法

def fab_1(m):
    f1=1
    f2=1
    f3=1
    if m<1:
        print('error!')
        return -1
    elif m == 1:
        return f1
    elif m == 2:
        return f2
    else:
        for i in range(3,m+1):
            f3=f1+f2
            f1=f2
            f2=f3
        return f3

months = int(input("请输入你想的时间,多少个月:"))
result = fab_1(months)

print('%d个月后小兔崽子共%d对' % (months,result))

2. 用递归法实现
# 用递归进行小兔崽子的计算

def fab_2(m):

    if m<1:
        print('error!')
        return -1
    else:
        if m == 1 or m == 2:
            return  1
        else:
            return fab_2(m-1)+fab_2(m-2)

monthes = int(input('请输入月数:'))

result = fab_2(monthes)

print('%d 个月后会有 %d对小兔崽子' % (monthes,result))

3.  小甲鱼使用迭代法的实现过程:采用倒着推的while循环。
#采用迭代方法实现经20个月之后的兔子总对数值
def fab(n):                          #定义函数,参数为月数,通过迭代实现对应的兔子总对数
    n1 = 1
    n2 = 1
    n3 = 1
    if n < 1:                           #n值小于1时则提示‘输入错误’并返回-1
        print('输入有误!')
        return -1
    while(n-2) > 0:                #月数大于2时,则进行循环
        n3 = n1 + n2              #n3为n1和n2之和
        n1 = n2                       #将n2值赋给n1
        n2 = n3                       #将n3值赋给n2
        n -= 1                          #n自减一
    return n3    
result = fab(20)                  #输入月数为20时计算兔子总对数
if result != -1:
    print('经过20个月产生的兔子总对数为%d!' %result)

4. 总结: 关于迭代和递归的使用问题,个人认为,能用迭代实现的计算尽量用迭代;鉴于递归的执行效率问题,要用于该用的地方(好像是废话哈,嘿嘿)。

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-23 18:15:56 | 显示全部楼层
n3 = 1实在搞不懂,这是在循环之前给n3赋值吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 07:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表