python中解 斐波那契数递推公式不能理解?

Python013

python中解 斐波那契数递推公式不能理解?,第1张

第一张图

def f(n):

if n==1 or n==2:

return 1

else:

return f(n-1)+f(n-2)

b=f(6)

print(b)

源代码(注意源代码的缩进)

第一张图是斐波那契数列的递归程序,其过程是

f(6)=f(5)+f(4)=f(4)+f(3)+f(3)+f(2)=f(3)+f(2)+f(2)+f(1)+f(2)+f(1)+f(2)

=f(2)+f(1)+f(2)+f(2)+f(1)+f(2)+f(1)+f(2)

因为f(2)=f(1)=1所以上式=1+1+1+1+1+1+1+1=8

第二张图

def fact(n):

if n==0:

return 1

else:

return n*fact(n-1)

b=fact(5)

print(b)

源代码(注意源代码的缩进)

第二张图是阶乘的递归程序,其过程是

fact(5)=5*fact(4)=5*4*fact(3)=5*4*3*fact(2)=5*4*3*2*fact(1)=5*4*3*2*1*fact(0)

因为fact(0)=1,所以上式=5*4*3*2*1*1=120

详细解释,

因为n等于5所以执行else语句返回5*fact(4)

n等于4所以执行else语句返回4*fact(3)

n等于3所以执行else语句返回3*fact(2)

n等于2所以执行else语句返回2*fact(1)

n等于1所以执行else语句返回1*fact(0)

n等于0所以执行if语句返回1

然后反向回归

fact(1)=1*1

fact(2)=2*1*1

fact(3)=3*2*1*1

fact(4)=4*3*2*1*1

fact(5)=5*4*3*2*1*1=120

用python构造一个n层的完全二叉树的代码如下:

 typedef struct {

int weight

int parent, lchild, rchild 

 } HTNode ,*HuffmanTree // 动态分配数组存储huffman树

  算法设计

void createHuffmantree(){

 ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode)// 动态分配数组存储huffman树,0号单元未用

// m:huffman 树中的结点数(m=2*n-1)

for (i=1i<=m++i)  

ht[i].parent= ht[i]->lch= ht[i]->rch=0 

    for (i=1i<=n++i)  

ht[i].weight=w[i] //初始化,w[i]:n个叶子的权值

    for (i=n+1i<=m,++i) { //建哈夫曼树

      select(i-1),s1,s2)  //在ht[k](1<=k<=i-1)中选择两个双亲域为零而权值取最小的结点 :s1和s2

      ht[s1].parent= ht[s2].parent=i 

      ht[i].lch=s1 

ht[i].rch=s2

      ht[i].weight=ht[s1].weight + ht[s2].weight    

}

}

类是对象的模板,是抽象的。

构造函数 init 是Python魔术方法之一,如图魔术方法

我们通过类模版去创建类的实例对象,然后再调用类定义的功能。

那实例对象的属性是通过什么来初始化的?

这时候Python引入来构造函数 init

构造函数,会在创建实例对象之后Python会自动执行此方法,把初始化的属性特点放到实例对象里。

通过前面的学习,我们知道一个python对象包含三个部分:id(识别码),type(对象类型),value(对象的值)

那么我们进一步深入对象包含的三部分:

我们通过类创建实例对象后,需要定义构造函数 init ()方法。

构造方法用于执行实例对象的初始化工作,即对象创建之后,初始化当前对象的相关的属性,无返回值

构造函数重点

我们通过栗子来学习构造函数的过程

构造函数初始化实例对象过程如下:

1.Animal类会通过默认的 new ()方法为实例对象在堆内存中为开辟一个空间

敲黑板,重点来啦~

拓展:

我们今天学习了构造函数 init (),其在创建对象之后被Python自动调用初始化实例对象属性数据值,无返回值,并且构造函数不能被显示调用。

创建对象时,如果需要,构造函数可以接受参数。当创建没有构造函数的类时,Python会自动创建一个不执行任何操作的默认构造函数。

每个类必须有一个构造函数,即使它只依赖于默认构造函数

好啦,以上是本期内容,欢迎大佬评论区指正~