Python程序开发基础 课件 任务2 递归调用-获取兔子数列_第1页
Python程序开发基础 课件 任务2 递归调用-获取兔子数列_第2页
Python程序开发基础 课件 任务2 递归调用-获取兔子数列_第3页
Python程序开发基础 课件 任务2 递归调用-获取兔子数列_第4页
Python程序开发基础 课件 任务2 递归调用-获取兔子数列_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

递归调用—获取兔子数列任务描述兔子数列又称斐波纳数列、黄金分割数列,它是由数学家列昂纳多·斐波纳以兔子繁殖的列子引出,故此得名。兔子繁殖的故事如下:兔子一般在出生2个月之后就有了繁殖能力,每对兔子每月可以繁殖1对小兔子,假如所有兔子都不会死,试问一年以后共有多少对兔子?本任务要求编写代码,利用递归实现根据月份计算兔子总数量的功能。任何事物都是有规律可循的,只有把握了事物的规律,问题将会迎刃而解。对于递归,先要清楚什么是递归?递归的特性是什么?然后根据其特性摸清规律,实现递归的应用;最后求解问题,完成任务。010203递归的应用任务实现递归定义与实现递归的定义与实现递归定义函数作为一种代码封装,可以被其他程序调用。当然,也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。就像一个人站在装满镜子的房间中,看到的影像就是递归的结果。递归只需少量代码就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。数学上有个经典的递归例子叫阶乘,阶乘通常定义为:n!

n(n

1)(n

2)...(1)这个关系给出了另一种表达阶乘的方式:n

0

1n!

n(n

1)!otherwise

阶乘的例子揭示了递归的两个关键特征:一是递归公式,它是求解原问题或相似子问题的结构;二是边界条件,它是最小化的子问题,也是递归终止的条件。上面阶乘中,根据n的取值分以下两种情况:(1)当n=0时,所得结果为1。(2)当n≠0时,所得结果为n×(n-1)!。当利用递归求解时,这里的n=0就是边界条件,n×(n-1)!就是递归公式。递归定义格式递归函数的定义格式如下:def

函数名([参数列表]):if

边界条件:def

fact(n):if

n==0:return

结果return

1else:return

n

*

fact(n

-

1)else:return

递归公式n

0

1n!

n(n

1)!otherwise

递归实现函数+分支语句

递归本身是一个函数,需要以函数定义方式描述

函数内部采用分支语句对输入参数进行判断

递归和边界,分别编写对应代码递归的应用阶乘计算根据用户输入的整数n,计算并输出n的阶乘值。递归调用过程递归函数的调用分为以下两个阶段:(1)递推阶段:递归本次的执行都基于上一次的运算结果。(2)回溯阶段:遇到终止条件时,则沿着递推往回一级一级地把值返回来。递归调用过程任务实现——获取兔子数列任务分析根据题意,本任务兔子数列满足如下公式:F(1)=1,

F(2)=1,

F(n)=

F(n-1)

+

F(n-2)

(n>=3,n∈N)因此,利用递归求解兔子数列时,n=1或2是边界条件,F(n)=

F(n-1)

+

F(n-2)是递归公式。程序代码根据递归实现方法,程序如下:#

获取兔子数列def

fibonacci(month):if

month

==

1

or

month

==

2:return

1else:return

fibonacci(month-1)

+

fibonacci(month-2)#

测试经过12个月份后的兔子对数result

=

fibonacci(13)print(f'12个月后兔子总数有{result}只')任务总结递归函数是指定义中调用函数自身的方式。递归具有两个关键特征:一是递归公式;二是边界条件。递归公式是求解原

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论