最近在看《c和指针》,每天会更新一些,如有错误望指正。
函数的编写可以在主函数之后,但是函数的声明必须在主函数之前,因为声明决定了函数调用的形参和返回值的类型,如果不提前声明,编译器会自动把返回值认为是整型数。
递归函数在将数字转换为字符串并打印出来的时候很有优势
binary_to_ascii(unsigned int value)
{
unsigned int q;
q=value/10;
if(q!=0)
binary_to_ascii(q);
putchar(value%10+'0');
}
注意,这个递归函数在第一次执行的时候,是要等binary_to_ascii(q)执行完了,再执行输出的,它的内层也是如此,这就使得它最终的输出顺序是从内向外的,即为先打印首位,再打印末尾,成功矫正了打印顺序。
递归函数的调用过程是每次调用函数所制造的形参和局部变量都会入栈,暂时存储在堆栈中,当最内层的函数执行完,开始向外层返回时,最后入栈的变量会被消除,然后形参和局部变量的值就是倒数第二层函数执行时的值,以此类推,最后堆栈中的值将会被不断销毁。能用堆栈暂时储存形参的值,这是递归函数和while的最大区别。但是正因如此才要注意不能递归太多次,使堆栈溢出。而且出栈入栈操作,对资源的消耗是比较大的,所以这是一个可以优化性能的部分。
像斐波那契数列这样的每次都返回两个首函数的递归函数,它的运算次数是成指数级增长的,对资源的消耗是巨大的。