递归函数

1、什么是递归函数?
  递归函数是指在一个函数内部通过调用自己来完成一个问题的求解。
2、如何使用递归函数以及什么情况下使用它?
  当我们在进行问题分解时,发现分解之后待解决的子问题与原问题有着相同的特性和解法,只是在问题规模上与原问题相比 有所减小,此时,就可以设计递归函数进行求解。
原理分析:
  比如,对于计算n!的问题,可以将其分解为:n! = n*(n-1)!。可见,分解后的子问题(n-1)!与原问题n!的计算方法完全一样,只是规模有所减小。同样,(n-1)!这个子问题又可以进一步分解为(n-1)*(n-2)!,(n-2)!可以进一步分解为(n-2)*(n-3)!…,直到要计算1!时,直接返回1。
3、Demo 编写递归函数计算n的阶乘。
1 def fac(n): #定义函数fac
2     if n==1: #如果要计算1的阶乘,则直接返回1(结束递归调用的条件)
3         return 1
4     return n*fac(n-1) #将计算n!分解为n*(n-1)!
5 print(fac(5)) #调用fac函数计算5的阶乘并将结果输出到屏幕
调用过程:fac(5)=>5*fac(4)=>5*(4*fac(3))=>5*(4*(3*fac(2)))=>5*(4*(3*(2*fac(1))))=>5*(4*(3*(2*1)))=>5*(4*(3*2))=>5*(4*6)=>5*24=>120
 
注意:当问题规模较大时,递归调用会涉及到很多层的函数调用,一方面会由于栈操作影响程序运行速度,另一方面在Python中有栈的限制,太多层的函数调用会引起栈溢出问题(如将第5行的fac(5)改为fac(1000)则会报错)。
4、Demo 使用非递归的方式调用n的阶乘
1 def fac(n): #定义函数fac
2     f=1 #保存阶乘结果
3     for i in range(2,n+1): #i依次取值为2至n
4         f*=i #将i乘到f上
5     return f #将计算结果返回
6 print(fac(5)) #调用fac函数计算5的阶乘并将结果输出到屏幕
 
(0)

相关推荐

  • 递归解决阶乘问题,以5的阶乘为例。

    递归解决阶乘问题: public class DiGui { public static void main(String[] args) { System.out.println(f(5)); } ...

  • Python|阶乘的运算

    问题描述在学习数学的过程中会遇到很多有规律的题型,下面小编将介绍阶乘的基本运算,用不同的方式去实现.解决方案由于阶乘的规律,具有循环的特性,所以我们开始可以想到的是用for循环来解决,在此之后还可以运 ...

  • 什么是递归函数呢?区间套的使用

    释放双眼,带上耳机,听听看~! 00:00 00:00 缠论之所以伟大,在于其发现了金融市场一个吻合于自然.社会等复杂系统普适的描述性的几何模型,即通过自同构性结构的自组和级别间的扩展自组递归函数.而 ...

  • 什么是递归函数?

    FlyWine2018-02-21 09:42:10 44910 收藏 120 分类专栏:C++文章标签:递归函数c++递归函数什么是递归 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA ...

  • 【视频更新】第四十四集 C语言程序的内存分配和递归函数

    介绍了C语言中的内存分配和递归函数

  • 【连载】(堆栈和递归函数)乐创DIY C语言讲义——4.5节

    4.5 堆栈和递归函数 堆栈这个概念,最早学习微机原理的时候就学过,它表示的是一种在汇编语言调用子程序时候保存现场的存储空间,它所具有的数据结构属性就是先进后出,这个是我们之前学习计算机硬件时候讲述的 ...

  • Python|递归函数之斐波那契数列

    上一期小编主要针对def函数的运用进行了简单的讲解,本期将会深入探讨def函数的另一种特别有用的函数(递归函数),其定义:如果一个函数在内部调自身,这个函数就是递归函数,递归函数的优点在于其定义简单, ...