《C语言函数递归调用.pptx》由会员分享,可在线阅读,更多相关《C语言函数递归调用.pptx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、函数的函数的递归调用用 在调用一个函数的过程中,出现直接或间接地调用该函数本身,称为函在调用一个函数的过程中,出现直接或间接地调用该函数本身,称为函数的递归调用。数的递归调用。f函数调用f函数f1函数调用f2函数f2函数调用f1函数int f(int x)int z;if(x=0)return 1;if(x0)z=f(x-1);else if(x0)z=f(x+1);return(2*z);第1页/共9页例例1 1:函数的递归调用:函数的递归调用#include void recur(int);int main(void)recur(1);return 0;void recur(int n)/
2、递归函数 printf(第%d级调用n,n);/1 if(n 4)recur(n+1);/递归 printf(第%d级返回n,n);/2 输出结果:第1级调用第2级调用第3级调用第4级调用第4级返回第3级返回第2级返回第1级返回解析:从结果可以看出,1和2相当于循环体,当符合测试条件(即n4)时,#1部分循环;当测试条件为false时,2部分循环。在递归函数中,位于递归调用之前的语句(即1部分),按被调函数(即recur())的顺序执行;位于递归调用之后的语句(即2部分),按被调函数相反的顺序执行。每级函数调用都有自己的变量,递归调用就相当于又从头开始执行函数的代码。每次函数调用都会返回一次,
3、并且按顺序逐级返回递归。第2页/共9页例例2 2:函数的递归调用:函数的递归调用#includeint fun(int n)/定义函数 if(n=0|n=1)n=1;else n=n*fun(n-1);/递归调用函数 return n;int main()int i,j;printf(请输入一个数字:n);scanf(%d,&i);j=fun(i);printf(它的阶乘为:%d,j);第3页/共9页例例3 3:函数的递归调用:函数的递归调用 有有3个人坐在一起,问第个人坐在一起,问第3个人多少岁?他说比第个人多少岁?他说比第2个人大个人大2岁。问第岁。问第2个人多少个人多少岁?他说比第岁?他
4、说比第1个人大个人大2岁。最后问第岁。最后问第1个人,他说是个人,他说是10岁。请问第岁。请问第3个人多大?个人多大?分析:分析:age(3)=age(2)+2;age(2)=age(1)+2;age(1)=10;归纳:归纳:n=1 age(n)=10 n1 age(n)=age(n-1)+2第4页/共9页程序如下:程序如下:#include int age(int n)int c;if(n=1)c=10;else if(n 1)c=age(n-1)+2;return c;int main(void)printf(“%d”,age(3);return 0;程序执行过程如下:程序执行过程如下:i
5、nt main(void)printf(“%d”,age(3);int age(3)int c;c=age(2)+2;return c;int age(2)int c;c=age(1)+2;return c;int age(1)int c;c=10;return c;例例4 4:函数的递归调用:函数的递归调用第5页/共9页课堂堂习题#include#include void func1(int i);void func1(int i);void func2(int i);void func2(int i);char st =hello,friend!;char st =hello,friend
6、!;void func1(int i)void func1(int i)printf(%c,sti);printf(%c,sti);if (i 3)if (i 3)i+=2;i+=2;func2(i);func2(i);void func2(int i)void func2(int i)printf(%c,sti);printf(%c,sti);if (i 3)if (i 3)i+=2;i+=2;func1(i);func1(i);int main(void)int main(void)int i=0;int i=0;func1(i);func1(i);return 0;return 0;A)
7、helloA)helloB)helB)helC)hloC)hloD)hlmD)hlm1 1下列程序执行后的输出结果是(下列程序执行后的输出结果是()第6页/共9页2有如下程序:#include int func(int a,int b)return(a+b);int main(void)int x=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%dn”,r);return 0;该程序的输出的结果是()。A)12B)13C)14D)15第7页/共9页3下面程序的输出结果是()。#include int f(int a,int b);int main(void)int i=2,p;p=f(i,i+1);printf(“%d”,p);return 0;int f(int a,int b)int c;if (a b)c=1;else if (a=b)c=0;else c=-1;return c;A)1B)0C)1D)2第8页/共9页感谢您的观看!第9页/共9页