博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 100例(10)
阅读量:6982 次
发布时间:2019-06-27

本文共 1029 字,大约阅读时间需要 3 分钟。

hot3.png

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少对?

数学分析:兔子的规律为数列1,1,2,3,5,8,13,21....

可以使用数列归纳这个问题,

前两项为 a1=a2=1 ;后面的项规律为  an=an-1+an-2.

递归:

python里面也可以使用递归函数,所谓递归函数就是利用函数本身调用自身,然后一直不停地调用自身,达到合适的条件,然后返回计算后的值。

例如:#计算5的以内的加法

          def add(j):

               if j==0:

                    return 0

              return j+add(j-1)

        print(add(5))

        #15  ,以上过程就是计算0+1+2+3+4+5

在这个过程中,add()函数本身调用了自身的函数return j+add(j-1),这样子一次又一次调用,最后直到 j==0,结束递归。上面的这个过程就叫做递归。

代码实现:

第一种解决方法,按照数学思维去设计算法:

第二种解决方法,斐波那契数列:

# _*_ coding:utf-8 _*_

def fab(max):

    n, a, b = 0, 0, 1

    while n < max:

        print b , a, b = b, a + b

        n = n + 1

fab(8)

斐波那契而数列升级版:

# _*_ coding:utf-8 _*_

def fab(max):

    n, a, b = 0, 0, 1

    while n < max:

        yield b

        a, b = b, a + b

        n = n + 1

 for i in fab(6):

     print i

def fibo(n):

    if n<=1:
        return n
    else:
        return(fibo(n-1)+fibo(n-2))
print(fibo(8))

注意语句:

如果一个赋值语句中,要赋的值是一个表达式,那么表达式优先于赋值执行:

a=0
b=1
a, b = b, a+b 在赋值的时候,先执行右边,这时候b =1 a=0 那么 a, b = b, a+b 就是:a,b=1,0+1 赋值完的结果就是 :a=1,b=1
说简单点,就像c=3+4,那么是不是先要等右边表达式:3+4=7执行完,再把7赋值给c,这一样的道理

转载于:https://my.oschina.net/u/3754854/blog/1841474

你可能感兴趣的文章
Transaction 'IREG', Abend 'APCT', at '????'.
查看>>
30343上机过程
查看>>
304413存储过程和触发器
查看>>
性能测试之数据准备
查看>>
Django艺术起点(初探)
查看>>
EXT.NET复杂布局(二)——报表
查看>>
Multipart forms from C# client
查看>>
过滤及分析数据包
查看>>
STM32中断名词
查看>>
[转]Java数组扩容算法及Java对它的应用
查看>>
01.Java安装及环境变量的设置
查看>>
十四、curator recipes之DistributedAtomicLong
查看>>
模板中的名字查找问题
查看>>
StringUtils工具类用法
查看>>
QListView的子项的ViewMode
查看>>
erlang的erl文件的编码方式
查看>>
Kosaraju算法解决强连通问题
查看>>
做一个完整的Java Web项目需要掌握的技能
查看>>
win7下安装docker的一些坑
查看>>
Java:正则表达式
查看>>