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