加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

递归算法 - 概述   BOM展开

(2011-05-04 07:59:02)
标签:

杂谈

分类: OS基础应用

递归算法 - 概述

 

递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程序中直接间接调用自身而产生的重入现像.

程序调用自身的编程技巧称为递归( recursion)。
一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口,否则将无限进行下去(死锁)。

递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历图的搜索)

递归的缺点:
递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。

典型的C语言递归示例:

void Move(char chSour,char chDest)
{
   
    printf("\nMove the top plate of %c to %c",chSour,chDest);
}
Hanoi(int n,char chA,char chB,char chC)
{
   
   
    if(n==1)Move(chA,chC);
   
    else
    {
        Hanoi(n-1,chA,chC,chB);
        Move(chA,chC);
        Hanoi(n-1,chB,chA,chC);
    }
}
main()
{
    int n ;
   
    printf("\nPlease input number of the plates: ");
    scanf("%d",&n);
    printf("\nMoving %d plates from A to C:",n);
   
   
    Hanoi(n,'A','B','C');
}


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有