第7章函数7.1函数概述7.2 上函数的定义和使用7.3 嵌套调用与递归调用变量与函数7.47.5随机数函数
第7章 函数 7.1 函数概述 7.2 函数的定义和使用 7.3 嵌套调用与递归调用 7.4 变量与函数 7.5 随机数函数
7.3-P124函数的嵌套与递归调用7.3.1函数的嵌套调用一P124C规定:函数不能嵌套定义,但可以嵌套调用main()a函数b函数D34调用函数a5调用函数b9?86main结束钢数嵌套调用的示就图2
7.3 函数的嵌套与递归调用—P124 C规定:函数不能嵌套定义, 7.3.1 函数的嵌套调用—P124 但可以嵌套调用 main( ) 调用函数a main结束 a函数 b函数 调用函数b ——函数嵌套调用的示意图 2
m!已知组合数C对于任意m、n,求C的值【例7.5] Ynl(m-n)!#include<stdio.h>1int main()2doublefac(intk)llfac()函数求k阶2③3③intm,n;④5?inti;④double t;doublef;?for(i=1,f=1;K=k;i++)scanf("%d%d",&m,&n);S?f=f*i?tcmnm,n);1/调用求组合数的函数cmn(8retyrn7printf("%d%d%ifin",m,n,t)?return O;10doubledmn(itm,intn)9-??doubleres,13res=fac(m)/(fac(p)*fac(m-n))main(cmn函数fac函数14return res:人调用函数cmn调用函数fac输出结束
① #include <stdio.h> ② double fac(int k) // fac()函数求k阶乘 ③ { ④ int i; ⑤ double f; ⑥ for (i=1,f=1;i<=k;i++) ⑦ f=f*i; ⑧ return(f); ⑨ } ⑩ double cmn(int m,int n) ⑪ { ⑫ double res; ⑬ res=fac(m)/(fac(n)*fac(m-n)); ⑭ return res; } main( ) 调用函数cmn 输出 结束 cmn函数 fac函数 调用函数fac ① int main() ② { ③ int m,n; ④ double t; ⑤ scanf("%d%d",&m,&n); ⑥ t=cmn(m,n); //调用求组合数的函数cmn() ⑦ printf("%d %d %lf\n",m,n,t); ⑧ return 0; ⑨ }
使用C语言函数注意:1)在C语言中,所有函数定义都是平行的----即在C程序中,函数不允许嵌套定义2)C语言允许函数嵌套调用:函数的嵌套调用是指一个函数在执行过程中调用一个函数(自已或其它函数),被调用函数在执行过程中文调用一个函数
使用C语言函数注意: 1)在C语言中,所有函数定义都是平行的 -即在C程序中,函数不允许嵌套定义。 2)C语言允许函数嵌套调用:函数的嵌套调用是指 一个函数在执行过程中调用一个函数(自己或其 它函数),被调用函数在执行过程中又调用一个 函数
7.3.2函数的递归调用一P125在调用一个函数的过程中直接或间接调用函数本身称为函数的递归调用。f(intx)//定义int71)1)int fl(int x)int f2(int t)inty,z ;② int a, c ;2 int3专营营3z-f(y);//调用00000544z-f2(y);c-f1(a);8088(2*z);return间接进归??//函数f直接调用自己66return(2*z);3Vo);return1函数f1间接调用自己f2(0)1f10一调f直接选归调f2调f15
5 7.3.2 函数的递归调用—P125 在调用一个函数的过程中直接或间接调用函数本身 ① int f(int x)//定义 -称为函数的递归调用。 ② { int y,z ; ③ . ④ z=f(y);//调用 ⑤ . ⑥ return (2*z); ⑦ }//函数 f 直接调用自己 ① int f1(int x) ② { int y,z ; ③ . ④ z=f2(y); ⑤ . ⑥ return(2*z); ⑦ } ① int f2(int t) ② { int a, c ; ③ . ④ c=f1(a); ⑤ . ⑥ return (3+c); 函数 f1 间接调用自己⑦ } f ( ) 调f 调f2 调f1 f1( ) f2( ) 直接递归 间接递归