Python 递归函数详解及实例

yipeiwu_com7年前Python基础

Python 递归函数

如果一个函数体直接或者间接调用自己,那么这个函数就称为递归函数.也就是说,递归函数体的执行过程中可能会返回去再次调用该函数.在python里,递归函数不需要任何特殊的语法,但是它需要付出一定的努力去理解和创建.
我们会以一个简单的例子开始:写一个函数求一个自然数中所有数字的和.在设计递归函数的时候,我们会寻找能把问题分解成简单的问题的方法.在这道题中,运算符%和//可以用来把一个数分成两部分:最低位和不包含最低位数字两部分.

18117的数字和为:1+8+1+1+7=18.这样我们就可以分割这个数.把这个数分割成最低位7和不包含最低位数字的和1+8+1+1=11.这种分割方法给我们提供了一个算法:通过最低位n%10与n//10的数字之和相加来计算数n的数字之和.这种方法存在特殊情况:如果一个数只有一位,那么它的数字之和就是它本身.这个算法可以用递归函数实现.

def sum_digit(n):
  """return the sum of the digit of positive integer n."""
  if n < 10:
    return n
  else:
   last = n % 10
   all_but_last = n // 10
   return sum_digit(all_but_last) + last

函数sum_digit的定义是完整和正确的,即使sum_digit函数在自身的函数体里被调用.

这样求一个数的数字之和的问题就被分解成了两部分:求除去最低位部分数字之和,然后加上最低位.这两个步骤全都比原问题要简单.这个函数是递归的,因为第一步的问题和原问题是相同类型的.也就是说,sum_digit的确实是我们需要去实现自然数数字求和的函数.

我们可以理解这个递归函数是怎样使用计算环境模型成功应用的.它 不需要任何新的规范.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

对pandas中两种数据类型Series和DataFrame的区别详解

对pandas中两种数据类型Series和DataFrame的区别详解

1. Series相当于数组numpy.array类似 s1=pd.Series([1,2,4,6,7,2]) s2=pd.Series([4,3,1,57,8],index=['a...

Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】

Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】

本文实例讲述了Python3.5函数的定义与使用。分享给大家供大家参考,具体如下: 1、函数学习框架 2、函数的定义与格式 (1)定义 (2)函数调用 注:函数名称...

Django自定义分页与bootstrap分页结合

Django自定义分页与bootstrap分页结合

django中有自带的分页模块Paginator,想Paginator提供对象的列表,就可以提供每一页上对象的方法。 这里的话不讲解Paginator,而是自定义一个分页类来完成需求:...

跟老齐学Python之集成开发环境(IDE)

跟老齐学Python之集成开发环境(IDE)

当安装好python之后,其实就已经可以进行开发了。下面我们开始写第一行python代码。 值得纪念的时刻:Hello world 如果是用windows,请打开CMD,并执行pytho...

python中文分词教程之前向最大正向匹配算法详解

前言 大家都知道,英文的分词由于单词间是以空格进行分隔的,所以分词要相对的容易些,而中文就不同了,中文中一个句子的分隔就是以字为单位的了,而所谓的正向最大匹配和逆向最大匹配便是一种分词匹...