首页 > 代码库 > 字符串逆序输出--递归

字符串逆序输出--递归

  说到递归,很容易想到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                     

字符串逆序输出--递归