算法学习——递归

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习——递归相关的知识,希望对你有一定的参考价值。

  递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。

一般来说 ,能够用到递归解决的问题应该满足以下三个条件:

  (1)待解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题相同,只是在数量规模上会有所不同;

  (2)递归调用的次数必须是有限的;

   (3)必须有结束递归的条件来终止递归。

以下是一些用到递归的简单实例:

eg_Fibonacci数列:

int Fib(int n)
{
    if(n==1||n==2)
        return (1);
    else
        return(Fib(n-1)+Fib(n-2));
}

eg_阶乘:

int fun(int n)
{
    if(n==1)
        return (1);
    else 
        return (fun(n-1)*n);
}

eg_汉诺塔问题:

void Hanoi(int n,char X,char Y,char Z)
{
    if(n==1)
        printf("\t将第%d个盘片从%c移动到%c\n",n,X,Z);
    else 
        {
            Hanoi(n-1,X,Y,Z);
            printf("\t将第%d个盘片从%c移动到%c\n",n,X,Z);
            Hanoi(n-1,Y,X,Z);
        }
}

递归一定程度上精简了代码,可将复杂的问题转换得很简单,但同样地,它让程序的效率变得低下(特别是在数据量大的时候)。

不管怎样,递归在算法中占有及其重要的地位,很多排序中用到它,例如快速排序,归并排序等等常见问题……

 

以上是关于算法学习——递归的主要内容,如果未能解决你的问题,请参考以下文章

[算法学习]斐波那契数计算

尚硅谷算法与数据结构学习笔记05 -- 递归

算法学习——递归和排列组合

算法学习——递归

算法竞赛入门经典_4.3_递归

递归算法的复杂性