递归算法怎么理解?不同类型的递归算法

发布:2022-10-11 19:25:17
阅读:1475
作者:网络整理
分享:复制链接

递归算法使用较小的输入值调用自身,并通过对较小输入的返回值执行基本操作来返回当前输入的结果。通俗地讲,递归算法是将问题拆分成多个子问题,通过优先更容易被处理的子问题,来解决完整问题。

要构建递归算法,需要将给定的问题陈述分成两部分。第一个是基本情况,第二个是递归步骤。

基本情况:是问题的最简单实例,由终止递归函数的条件组成,在满足给定条件时评估结果。

递归步骤:它通过对同一函数进行递归调用来计算结果,但输入的大小或复杂性会降低。

不同类型的递归

有四种不同类型的递归算法。

直接递归

如果函数在其函数体中重复调用自身,则称为直接递归。为了更好地理解这个定义,请查看直接递归程序的结构。

int fun(int z){

fun(z-1);}

间接递归

函数通过另一个函数调用自身的递归称为间接递归。

间接递归程序结构。

int fun1(int z)
{
int fun2(int y
{
fun2(z-1);
fun1(y-2);
}
}

尾递归

如果递归调用是函数最后一次执行,则称递归函数是尾递归的。

int fun(int z)
{
printf(“%d”,z);
fun(z-1);
}

无尾递归

如果递归调用不是函数完成的最后一件事,则称递归函数是非尾递归的。

int fun(int z)
{
fun(z-1);
printf(“%d”,z);
}

递归方法的内存分配

每个递归调用都会在堆栈内存上生成一个新的函数副本。一旦返回一些数据,副本就会从存储中删除。每个递归调用都维护一个单独的堆栈,因为函数内部定义的所有参数和其他变量都保存在堆栈上。返回相关函数的值后,堆栈被删除。

递归在解析和监控每个递归调用的值方面非常复杂。因此,必须维护堆栈并跟踪其中指定的变量的值。

扫码进群
微信群
免费体验AI服务