函数的递归调用 1.定义:在调用一个函数的过程中直接或间接地调用该 函数本身。 直接调用 int f(x) f函数 int x. nt y,z: z=f(); 调用f函数 return(2*z)
函数的递归调用 1. 定义: 在调用一个函数的过程中直接或间接地调用该 函数本身。 • 直接调用 int f(x) int x; { int y,z; ….. z=f(x); …… return (2*z); } f 函数 调用 f函数
●间接调用 int f1(x) int f2 (t) int X; int t. i int y, z; i int a, ci z=f2 ( y); c=f1(a) return(2*z):] return(3+c)
int f1(x) int x; { int y,z; ….. z=f2( y); …… return (2*z); } int f2(t) int t; { int a,c; ….. c=f1(a); …… return (3+c); } •间接调用
f1函数 f2函数 调用f2函数 调用作1函数 特点 是无终止的递归调用,因此,应该给定一个限制递 归次数的条件
• 特点 是无终止的递归调用,因此,应该给定一个限制递 归次数的条件。 f 1函数 调用 f2函数 f 2函数 调用 f1函数
例如:写一函数求n! float fac( int n float f if(n<o printf("n<0, data error! \n") else if(n==0|n==1)f=l else f=fac(n-1 *n return f;
float fac ( int n) { float f; if(n<0) printf(“n<0,data error!\n”); else if(n= =0||n= =1) f=1; else f=fac(n-1)* n ; return f; } 例如:写一函数求n!
以求4的阶乘为例: fac(4)=4*fac(3) fac(4)=4*3*2*1 fac(3)=3*fac(2) fac(3)=3*2*1 下 fac(2)=2*fac( fac(2)=2*1 推 1) 代 ac(1)=1
以求4的阶乘为例: fac(4)=4*fac(3) fac(3)=3*fac( 2) fac(2)=2*fac( 1) fac(1)=1 fac(4)=4*3*2*1 fac(2)=2*1 fac(3)=3*2*1 下 推 回 代