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)
一般递归
一般递归必须要有递归结束条件,可以在递归调用前使用一些语句,在递归调用之后使用一些语句达到期望的功能呢,在递归调用之前的语句会顺序执行,在递归调用之后的语句会逆序调用。
阅读全文
0 0
- C语言之递归函数
- C语言 之递归函数
- C语言之递归函数
- C语言之递归函数的使用
- c语言递归函数
- C语言 函数递归
- C语言之函数调用12—递归法求阿克曼函数
- C语言之递归
- C语言_递归函数之汉诺塔问题
- C语言之 递归函数 输出f(4)结果
- c语言--函数与递归
- C语言函数的递归
- c语言----函数的递归
- C语言之尾递归
- c语言之递归调用
- C语言之递归篇
- C语言之函数调用16—递归法之一般函数的调用(1)
- C语言之函数调用17—递归法之一般函数的调用(2)
- git学习
- 模板方法模式
- Android之多线程解析(一)之Thread、Runnable
- 简单工厂设计模式与工厂设计模式
- ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)(YES也一样的)
- C语言之递归函数
- MyBatis异常:No operations allowed after connection closed
- 二分法求最大距离的最小值
- C++ 引用计数写时拷贝
- ROM 之 DDS的调频
- [BZOJ3572][HNOI2014]世界树-虚树+树形DP
- 23种设计模式之——工厂方法模式
- 洛谷P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
- MySQL的Query Cache原理分析