当前位置: 首页 > news >正文

网站 友情链接怎么做百度关键词seo外包

网站 友情链接怎么做,百度关键词seo外包,沈阳微网站建设,怎样做站长建网站问题: fibonacci 斐波拉契数列,用递归和循环的方法分别写,比较递归和循环的思路和写法的差别 最直接的思路,是写递归方法 循环方法的稍微有点绕,我觉得问题主要是出在,总结循环的通项公式更麻烦,难在数学…

问题: fibonacci 斐波拉契数列,用递归和循环的方法分别写,比较递归和循环的思路和写法的差别

最直接的思路,是写递归方法

循环方法的稍微有点绕,我觉得问题主要是出在,总结循环的通项公式更麻烦,难在数学上。

1 python写的递归如下

1.1 py代码

####------递归版fib--------------####
def fib1(x):if x==0:return 1if x==1:return 1else:return fib1(x-1)+fib1(x-2)print(fib1(5))
print()for i in range(6):print(fib1(i))
print()

1.2 总结写这个fibo数列的递归的难点

  • 最核心的,先要总结递归规律
  • 这个fibo的递归规律很简单,就是 f(x)=f(x-1)+f(x-2), 这个也是通项公式
  • fibo的这个规律狠清晰,不难

2 python写的循环版本

2.1 py代码,循环版本

####------循环版fib--------------####def fib2(x):sum1=1sum2=1for i in range(x):if i==0:sum=1if i==1:sum=1elif i>1:sum=sum1+sum2sum1=sum2 sum2=sum return sum   print(fib2(6))
print()

2.2 没解决的奇怪报错问题

2.2.1 报错的代码

####------循环版fib--------------####def fib2(x):sum1=1sum2=1for i in range(x):if i==0:sum=1if i==1:sum=1elif i>1:sum=sum1+sum2sum1=sum2 sum2=sum return sum   print(fib2(6))
print()for i in range(6):print(fib2(i))
print()

2.2.2 导致报错的代码:报错的部分由于下面这部分引起

开始我并没有发现

后面发现删除这段代码就不报错

for i in range(6):
    print(fib2(i))
print()

2.2.3 报错内容

UnboundLocalError: cannot access local variable 'sum' where it is not associ
报错解释:

UnboundLocalError 指的是在函数内部尝试访问一个还没有赋值的局部变量。在 Python 中,如果你在函数内部给一个变量赋值了,它就会被视为一个局部变量,除非明确地声明它是全局变量。如果你在赋值之前就尝试访问它,就会引发 UnboundLocalError。

报错原因可能是你在给变量 sum 赋值之前就尝试使用它,或者你的函数内部有一个 sum() 内置函数的调用,导致名称冲突。

2.2.4 暂时没有找到好的解决办法

3 关于 fibo的循环版本的详细说明

3.1 对循环版fibo数列的 详细打点说明版本,可以清晰看到过程

####------循环版fib,详细打点--------------####
def fib3(x):#sum=0  #为啥详细版的这里不设 sum=0 不报错呢?sum1=1sum2=1for i in range(x):print("for循环第", i+1 ,"轮开始")if i==0:sum=1if i==1:sum=1#sum3=sum1+sum2#sum4=sum3+sum2#sum5=sum4+sum3#从这些公式里抽象出循环的,变换规律,抽象出通用公式+(先)辅助的值变换公式elif i>1:   #直接用 esle居然不行,必须判断 elseif i>1print("sum1=",sum1)print("sum2=",sum2)sum=sum1+sum2print("sum=",sum)sum1=sum2  #和下面那句顺序不能反sum2=sum print("sum1=",sum1)print("sum2=",sum2)print("sum=",sum)print("for循环第", i+1 ,"轮结束")print()return sum   print(fib3(6))
print()

3.2 最核心的,先要从表面的 递推关系上找到 通项公式组

        if i==0:
             sum=1
        if i==1:
            sum=1
        sum3=sum1+sum2
        sum4=sum3+sum2
        sum5=sum4+sum3

  • 可以看到
  • S3=S2+S1
  • S4=S3+S2
  • ...
  • 通项公式 S(n) =  S(n-1)+ S(n-2)
  • 但是循环不能像递归那样调用 函数本身,那就要找到 通项公式里的循环规律
  • 除了S(n) =  S(n-1)+ S(n-2)
  • 仔细看
  • 还有S(n-1)=S(n)
  • 还有S(n-2)=S(n-1)

因此,联立这3个方程就可以了

  • S(n) =  S(n-1)+ S(n-2)
  • S(n-1)=S(n)
  • S(n-2)=S(n-1)

4 目的:总结  递归和循环思想的相同和区别

4.1 区别

  • 递归是在函数内部,调用函数自身( 函数定义内部,函数的代码block里引用自己的函数名)
  • 不用直接写循环,写调用函数自身,没有直接的for while等循环形式
  • 但是其实内部已经是循环逻辑了

  • 循环是,除了处理一些特殊情况外,找到通项公式,以便进行循环
  • 肯定有循环的形式如for while等
  • 有可能是几个 通项公式方程组,反正要组成合理的,循环体,镶嵌在前面的循环形式for/while等之内

    for i in range(x):
        if i==0:
            sum=1
        if i==1:
            sum=1
        elif i>1:
            sum=sum1+sum2
            sum1=sum2 
            sum2=sum 

4.2 相同

  • 本质都是循环逻辑
  • 都需要找出数列的通项公式,便于告诉计算机进行循环计算
  • 在fibo数列里,循环方式,找通项公式,更难

5 比较网上别人写的 fibo的 递归和 循环的代码

http://www.khdw.cn/news/41810.html

相关文章:

  • 毕业论文做家具网站设计要求seo云优化平台
  • 云服务器怎么做网站域名查询ip爱站网
  • 美食网页设计报告搜索引擎排名优化技术
  • 做教育类的网站名注册一个公司网站需要多少钱
  • WordPress完整安裝包宣城网站seo
  • 刘强东自己做网站hao123网址导航
  • 江门网站建设策划中小企业网站
  • 北京网站建设dqcxseo168小视频
  • 武汉新公司做网站|武昌专业做网站--武汉金宇盈科技有限公司如何建立自己的网页
  • 网站制作哪里做得好莆田seo
  • 做网站挣钱不网络营销策略包括哪几大策略
  • dw做游戏网站代码semester是什么意思
  • 做的网站没流量吗怎么请专业拓客团队
  • 网站生成word网络营销做的好的企业
  • 制造行业网站建设市场营销策划方案范文
  • 武汉中建广场做网站的公司有哪些什么推广平台比较好
  • 深圳购物网站建设seo成都培训
  • 传动设备 技术支持 东莞网站建设web设计一个简单网页
  • 虚拟主机怎么做网站企业网页
  • 网站建设整改情况优化seo可以从以下几个方面进行
  • 工作室网站域名易观数据
  • 快速做彩平图得网站发软文
  • wordpress 重写seo营销网站的设计标准
  • 家政服务网站建设关键词搜索排名工具
  • 网站不备案可以做百度竞价吗100个常用的关键词
  • 建设电影会员网站首页网络广告营销经典案例
  • 做网站标配互联网营销推广渠道
  • 网站怎么做定时任务短链接生成网址
  • 为什么有的网站打不开怎样做好服务营销
  • 美容美发网站建设方案潍坊seo建站