码迷,mamicode.com
首页 > 编程语言 > 详细

递归算法实例

时间:2016-07-24 00:32:14      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:

先copy一下百度百科的解说。程序调用自身的编程技巧称为递归( recursion)。

例如,要计算1-9的9位数字的乘积,直观的算法是1*2*3*4*5*6*7*8*9,如果

要计算1-10000的乘积,直观的算法就难于实现出,而递归就可以很简单的实现。

 

实例1

# coding: utf-8

 

def recurision(n):                       # recurision 就是递归

  if n == 1:

    return n                               # 在函数里面输出运算值的地方,如果用print, 用print type(recurision(10)), 显示

  else:                                         其是NoneType,而显然,只有数才能和数相乘。所以我们用return返回函数的值。                                      

    return n * recurision(n - 1)

 

recurision(10)

 

好吧, 是不是没看懂啊。一开始我也摸不着头脑。 不过既然是数学问题,列个式子

你就知道了。

recurision(n) = n * resurision(n - 1)

                   = n * (n - 1) * recurison(n - 2)

直到 n = 1, 也就是if成立的时候, 所以我们用if...else语句

so easy!

----------------------------------------------------------------------------------

实例2

我们要删除脚本文件(‘.py‘程序)所在的文件夹下面的所有文本文件(以‘.txt‘ 为后缀名)

 

# coding: utf-8

 

import os

import sys

 

# 脚本文件所在的目录/路径,比如‘c:\python27\1.py‘ 前面 的‘c:\python27‘

currdir = sys.path[0]          

 

def  RemoveFile(dir, postfix):

  # 判断是否为文件夹,是为True, 否为False。 同理 os.path.isfile 判断是否为文件

  if os.path.isdir(dir):           

    for file in os.listdir(dir):                       # os.listdir列出dir目录下所有的子文件和子文件夹。   

      RemoveFile(dir + ‘\\‘ + file, postfix) 

  elif os.path.splitext(dir)[1] == postfix:   # os.path.splitext()将文件名的前缀与后缀分开。比如1.txt的1和.txt

    os.remove(dir)                                   # os.remove()删除该文件

 

RemoveFile(currdir, ‘.txt‘)

 

Ok, 让我们来消化一下。假设我们的这个脚本名是1.py, 放在‘c:\python27‘下, 而这文件夹里面还有1.txt和2.txt之类

要删除的文件。

执行RemoveFile(currdir, ‘.txt‘)之后肯定是if语句先成立,因为currdir首先就是py文件所在的目录了(目录除了路径的意

思,就是指文件夹) 。而像RemoveFile(‘c:\\python27‘ + ‘\\‘ + 1.py, ‘.txt‘)一看就后缀名不一样。踢掉。 所以, 最后, 只有txt文件是符合elif的情况的。顺利删除。

 

递归算法实例

标签:

原文地址:http://www.cnblogs.com/Ruby517/p/5699888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!