使用递归函数一般会简化算法流程,降低函数的空间复杂性,使代码看起来更加的简洁。但递归带来诸多好处的同时也会降低代码的可读性,尤其是复杂的函数只能看成“黑盒子”去理解,单步调试虽然好用但是不适用于复杂函数。最好的办法是真正的理解递归!
递归就是函数在执行过程中调用自身。这里以输入字符倒序输出(字符串反转)代码为例进行简要介绍。本质就是一步步走到结束条件然后再倒回来把每一次递归的完整步骤走完。具体过程见下图(手写的比较low)。如图所示,main函数流程用红色笔迹表示。一直再往前推进,铅笔部分从右到左依次表示递归函数reverse结束。
#include<stdio.h>
void reverse();
int main()
{ printf("输入一个字符:");
reverse();
printf("结束就打出来");
getchar();
return 0;
}
void reverse()
{ char c;
printf("#");
scanf("%c",&c);
printf("*");
if ( c!= '\n')
{ printf("$");
reverse();
printf("%c",c);
}
else printf("123");
}
如图所示,main函数流程用红色笔迹表示。一直再往前推进,铅笔部分从右到左依次表示递归函数reverse结束。