python递归函数例子,Python递归算法经典实例

  python递归函数例子,Python递归算法经典实例

  本文中目录递归函数递归实例的特征效率优势

  递归函数递归

  递归是指当一个函数运行本函数中的调用它自身递归函数时,被反复调用,每次调用都进入一个新的层次。递归函数需要结束条件

  当函数递归继续直到撞墙返回时,墙是结束条件

  所以递归需要两个要素,终止条件和递归关系。

  注:

  对于递归,每次调用一个函数,计算机都会为该函数分配一个新的空间。也就是说,当被调用的函数返回时,调用函数中的变量仍然是原来的值。否则无法实现反向输出。

  示例n # includes dio . hint factorial(intn){ int result;If(n0 )//判断异常({printf))输入错误!\ n ;0;} else if(n==0 n==1){ result=1;//推墙} else {result=阶乘(n-1)* n;))递归关系,这个数和前一个数的关系。}返回结果;(} int main)){ int n=5;//输入数字5,计算5的阶乘printf(" Factorial of % d=% d ",n,Factorial(n));0;}计算5的阶乘时,程序先进行递归,当n=1或n=0时返回1。按back计算退货。可见递归函数需要结束条件

  斐波那契数列斐波那契数列是这样一个数列:

  0, 1, 1, 2, 3, 5, 8, 13, 21.这个序列从第三项开始,分别等于前两项之和。

  # include stdio . hlongfibonacci(long num)if)num==0 num==1){ return num;} else { returns Fibre Channel(NUM-2)Fibre Channel(NUM-2);}}void main () { long数字;请输入puts“”的正整数;扫描( %LD ,数字);Printf(斐波那契数列的%ld项为:%LD(n),number,斐波那契(number);}

  应用题~~ xqdyet为了学好英语,需要每天记单词。第一天请记住一个,第二天记住两个,然后按照顺序,用代码完成。计算第10天开始时xqdyet变成了什么单词。

  分析:

  墙(结束条件)是“第一天记住一个”

  递归关系是“第n天的字数=第n-1天的字数,n’

  # includesdio.h/*函数获取字数*/intgetwordnumber(n)if(n==1)){ return 1;//推墙} else { returngetword number(n-1)n;//递归关系} } int main()int num=getword number))10);//得到的单词数是printf(xqdyet10第10天记住的:%d单词。\n ,编号;0;)递归函数的特征:

  1.每一级函数调用都有自己的变量,但不复制函数代码。比如计算5的阶乘时,每个递归变量都是不同的。每次调用都会返回,比如计算2.5的阶乘时,每次递归都会返回,进行下一次;3.递归函数中,递归调用前的语句与各类被调用函数的执行顺序相同;4.在递归函数中,递归调用后语句的执行顺序与每个调用函数的执行顺序相反;5.递归函数需要end语句。一句话总结递归:自我调用且有完成状态。

  效率系统栈

  内存中属于OS空间的区域主要用于:(1)保存中断场景。对于嵌套中断,中断程序的场景信息依次推入系统堆栈,中断返回时逆序弹出。)2)保存操作系统子程序之间相互调用的子程序(函数)的参数、返回值、返回值和局部变量。

  用户栈

  在用户进程空间的一个区域中,保存了用户进程子程序之间调用的子程序(函数)的参数、返回值、返回值和局部变量。

  我们写的递归程序是用户程序,所以使用用户栈。

  栈溢出

  调用的参数通过堆栈区传递,堆栈区在调用过程中会占用线程的堆栈资源。另一方面,递归调用只有在到达最后一个端点时才能使函数按顺序结束,但在到达最后一个端点之前不会释放占用的堆栈区域。当递归调用过多时,占用的堆栈资源超过最大线程值,堆栈溢出,可能导致程序异常结束。

  综上:

  调用函数时,每次调用都会保存地址,传递参数等。这是通过递归工作栈实现的。具体来说,每次调用函数本身时保存的内容是局部变量、独立变量、调用函数的地址和返回值。所以如果递归调用n次,分配n个局部变量,n个S形自变量,n个调用函数地址,n个返回值,效率会很低。

  优点循环能干的事,递归都能干;递归能干的循环不一定能干代码简洁、清晰、易懂

  对我们来说,循环可以解决事情,尽量不要应用递归。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言递归法求汉诺塔,汉诺塔递归算法c++语言
  • c语言递归法求汉诺塔,汉诺塔递归算法c++语言,C语言超详细讲解递归算法汉诺塔
  • javan的阶乘的递归算法,递归算法实现阶乘
  • javan的阶乘的递归算法,递归算法实现阶乘,Java算法之递归算法计算阶乘
  • 用递归法求汉诺塔问题Python,汉诺塔递归算法编程
  • 递归算法经典实例,递归算法一般利用什么实现
  • 深度优先搜索的递归算法,设计一个程序实现深度优先搜索(使用递归算法)
  • 汉诺塔问题递归算法实现过程,使用递归方法实现汉诺塔问题的求解编程
  • Python二分查找算法,二分查找非递归算法
  • 迭代算法与递归算法,简述迭代和递归的区别
  • 递归算法和经典递归例子,递归函数python例子
  • python中递归程序,所有递归程序都可以用非递归算法实现
  • 最简单的递归算法c语言举例,递归算法经典实例c语言
  • 递归算法复杂度分析步骤,递归算法的时间复杂度和空间复杂度
  • python递归函数详解,Python递归算法经典实例
  • 留言与评论(共有 条评论)
       
    验证码: