C语言之递归函数

来源:互联网 发布:二战日本装备知乎 编辑:程序博客网 时间:2024/04/30 09:44

C语言之递归函数

  • 递归定义
  • 尾递归
  • 一般递归

递归定义

C语言中的递归定义为函数自己调用自己,函数递归有时可以比较方便的完成某些任务,比如可以替代循环等。C语言中的函数递归在递归语句前的所有语句会顺序执行,在递归语句后的return或者函数末尾前的所有语句会逆序执行。递归必须要有递归结束条件,否则递归会一直进行下去,成为死循环。
//recursion.c-----演示递归调用#include <stdio.h>int main(void){  void shown(int n);        //函数声明  int n=1;                 //n=1  shown(n);               //调用递归函数  return 0;}void shown(int n){  printf("front---%d\n",n);   //递归语句之前,顺序执行  if(n<5)     shown(n+1);  printf("behind---%d\n",n);  //递归语句之后,逆序执行  return;}
 执行结果: ![这里写图片描述](http://img.blog.csdn.net/20170714233154177?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdzaGFveGluZzE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

尾递归

在C语言中的递归语句与return语句之间或者与函数末尾之间没有其他语句则称之为尾递归,尾递归一般用以代替循环,比如阶乘的运算,如求n的阶乘。因为n!可以用以下的计算方式来实现,当n==1或者0时n!=1,否则f(n)=f(n-1)*n。
//facn.c----演示阶乘运算#include <stdio.h>int main(void){  long facn(long n);  long n=10;  printf("%d!==%ld",n,facn(n));  return 0;}long facn(long n){  if(n==1||n==0)      return 1;  else      return facn(n-1)*n;}
 执行结果:![这里写图片描述](http://img.blog.csdn.net/20170714234725677?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmdzaGFveGluZzE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

一般递归

 一般递归必须要有递归结束条件,可以在递归调用前使用一些语句,在递归调用之后使用一些语句达到期望的功能呢,在递归调用之前的语句会顺序执行,在递归调用之后的语句会逆序调用。