注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

AP计算机众里寻他千百度,名师成就满分路

AP计算机

 
 
 

日志

 
 
关于我

大学讲师,中国首批AP计算机教师,著有中国第一套,历经五年实践证明深受学生欢迎的成功的AP计算机双语教材,2013年以93%的满分率开创了中国AP计算机成功的先河,远远超出全美26.6%的满分率,为中国AP计算机教学树立了典范,并在同年加拿大计算机竞赛中勇夺桂冠,任教学生获哥伦比亚大学,麻省理工学院,卡耐基梅隆大学,宾夕法尼亚大学,康奈尔大学,西北大学等学校录取,远程学生遍及北京、长春、南京、重庆、广州、济南, 深圳、成都、费城,洛杉矶,加州,宾州,新罕布什尔州等地,希望借此平台为信息技术的发展做出贡献!

网易考拉推荐

深入Python(5):递归  

2015-06-15 22:33:34|  分类: Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如果函数包含了对其自身的调用,该函数就是递归的。如下:

复制代码
"""非递归方式呈现"""
sum = 0
for obj in range(1,101):
    sum+=obj
print sum

""""1+2+3+...+100"""
def foo(n):
    if n>0:return n+foo(n-1)
    if n<=0:return 0
print foo(100)

"""阶乘"""
def fac(n):
    if n==0 or n==1:
        return 1
    else:
        return n*fac(n-1)
print fac(10)    
复制代码

注意:

如果在使用递归的时候,出现条件判断,一定要把所有可能出现的条件都进行相应的处理。例如累加,如果写成这样:

""""1+2+3+...+100"""
def foo(n):
    if n>0:return n+foo(n-1)
print foo(100)

则会出错,可能有人会说,我只要满足条件就执行,不满足就不执行,但是不要忘了,如果一个Python函数被设计成不返回任何东西,它会返回None。出错如下:

Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "<stdin>", line 2, in foo
  File "<stdin>", line 2, in foo
  ...
  File "<stdin>", line 2, in foo
TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

这里插入一些关于递归的网方解释,因为我是从网上搜到的这些内容:
(1)递归就是在过程或函数里调用自身;
(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(比如Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(比如树的遍历,图的搜索)   

递归的缺点:递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

  评论这张
 
阅读(118)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018