字符串逆序输出--递归

  说到递归,很容易想到n!,斐波那契数列(数兔子问题),当然这些都是很好理解的问题。个人认为,最能反映递归实质的是汉诺塔和字符串逆向输出问题。汉诺塔问题只需要思考一步,其他难题就交给计算机吧,这很好的证明了递归就是懒人专用算法。仅凭这一点,就足以掩盖递归效率低下的缺陷。我们都知道,递归就是函数调用自身的过程。在c语言中,函数调用自身和调用其他函数,没有一点区别。都是保存现场,函数调用,恢复现场的过程,这是通俗的说法,用我们专业的术语来说,递归的实质就是入栈和出栈的过程。解释到这里,用递归实现字符串逆序输出问题就很好解决了。直接上代码,理解这个问题,抓住整个入栈出栈的本质就好。

code:

  4  *       Filename:  22.c
  5  *
  6  *    Description:  
  7  *
  8  *        Version:  1.0
  9  *        Created:  2014年12月29日 09时02分57秒
 10  *       Revision:  none
 11  *       Compiler:  gcc
 12  *
 13  *         Author:  3me (), 
 14  *   Organization:  
 15  *
 16  * =====================================================================================
 17  */
 18 #include <stdlib.h>
 19 #include <stdio.h>
 20 /* 
 21  * ===  FUNCTION  ======================================================================
 22  *         Name:  print
 23  *  Description:  
 24  * =====================================================================================
 25  */
 26     void
 27 print (  )
 28 {
 29     int c;
 30     if ( (c = getchar()) != -1 )
 31         print();
 32     else
 33         printf("\n");
 34     if ( c != -1 )
 35         printf("%c", c);
 36     return;
 37 }   /* -----  end of function print  ----- */
 38 /* 
 39  * ===  FUNCTION  ======================================================================
 40  *         Name:  main
 41  *  Description:  
 42  * =====================================================================================
 43  */
 44     int
 45 main ( int argc, char *argv[] )
 46 {
 47     print();
 48 
 49     return EXIT_SUCCESS;
 50 }       /* ----------  end of function main  ---------- */
 51 
                    
posted @ 2014-12-29 09:38  3me  阅读(2992)  评论(0编辑  收藏  举报