首页 > 编程知识 正文

python 递归函数,递归函数简单实例

时间:2023-05-04 05:37:27 阅读:115028 作者:3654

文章目录递归函数递归例题特征效率的优点

递归函数递归

递归是指函数在该函数中运行调用它自身递归函数时,它本身被重复调用,每次调用时进入新的级别。 递归函数需要结束条件

当函数递归持续到遇到墙壁并返回时,此墙壁为结束条件

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

注:

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

例题n的阶乘# include stdio.hint factorial (intn ) { int result; if(n0 )//判断例外({ printf ) )输入错误! n '; 返回0; }elseif(n==0||n==1) { result=1; //推墙}else{result=factorial(n-1 ) * n; ) )递归关系,这个数和前面的数的关系。 }返回结果; (}int main ) ) { int n=5; //输入数字5,计算5的阶乘printf (“% d的阶乘=%d”,n,factorial(n ) ); 返回0; }程序在计算5的阶乘时,先执行递归,在n=1或n=0时返回1,按回去计算返回。 由此可见,递归函数需要结束条件

斐波那契数列斐波那契数列就是这样的数列:

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

# include stdio.hlongfibonacci (long num ) if ) num==0||num==1) { return num; } else {返回光纤通道(num-2 )光纤通道(num-2 ); }}void main () { long number; 请输入puts ' '正整数: '; 扫描(' % LD ',number ); printf (斐波那契数列第%ld项为:%LD(n )、number、Fibonacci(number ); }

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

分析:

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

递归关系为“第n天记的单词=第n-1天记的单词数n '

#include stdio.h/*获取单词数的函数*/intgetwordnumber(n ) if (n==1) ) { return 1; //推墙}else{returngetwordnumber(n-1 ) n; //递归关系}}int main () intnum=getwordnumber ) ) 10 ); //取得的单词数为printf(xqdyet10第10天记住了:%d个单词。 n ',num; 返回0; )特征递归函数的特征:

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

效率系统栈

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

用户栈

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

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

栈溢出

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

综上:

调用函数时,每次调用都进行地址保存、参数传递等。 这是通过递归工作栈实现的。 具体而言,每次调用函数自身时保存的内容是局部变量、自变量、调用函数地址、返回值。 于是,如果递归地调用n次,则分配n次局部变量、n次s形自变量、n次调用函数地址、n次返回值,效率低下。

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

对我们来说,循环可以解决的东西,尽量不应用递归。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。