scanf(\ max=max4(a,b,c,d);
printf(\ return 0; }
主函数
调用后肯定是4个数中最大者 输出最大者
int max4(int a,int b,int c,int d) { int max2(int a,int b); int m;
m=max2(a,b);
m=max2(m,c); m=max2(m,d); return(m); }
max4函数
对max2 函数声明
int max4(int a,int b,int c,int d) { int max2(int a,int b); int m;
m=max2(a,b);
m=max2(m,c); m=max2(m,d); return(m); }
max4函数 a,b中较大者 a,b,c中较大者 a,b,c,d中最大者
int max4(int a,int b,int c,int d) { int max2(int a,int b); int m;
m=max2(a,b);
m=max2(m,c); m=max2(m,d); return(m); }
max4函数
int max2(int a,int b) { if(a>=b)
return a; else
return b;
}
max2函数
找a,b中较大者
int max4(int a,int b,int c,int d) { int max2(int a,int b); int m;
m=max2(a,b);
m=max2(m,c); m=max2(m,d); return(m); }
max4函数
int max2(int a,int b) { if(a>=b)
return a; else
return b; }
max2函数
return(a>b?a:b);
int max4(int a,int b,int c,int d) { int max2(int a,int b); int m;
m=max2(a,b);
m=max2(m,c); m=max2(m,d); return(m); }
max4函数
int max2(int a,int b) { return(a>b?a:b); int max4(int a,int b,int c,int d) { int max2(int a,int b); int m;
m=max2(a,b);
m=max2(m,c); m=max2(m,d); return(m); }
max4函数
m=max2(max2(a,b),c);
int max2(int a,int b) { return(a>b?a:b); int max4(int a,int b,int c,int d) { int max2(int a,int b); int m;
} } m=max2(a,b);
m=max2(m,c); m=max2(m,d); return(m); }
max4函数
m=max2(max2(max2(a,b),c),d);
int max2(int a,int b) { return(a>b?a:b); } int max4(int a,int b,int c,int d) { int max2(int a,int b); int m;
m=max2(a,b);
m=max2(m,c); m=max2(m,d); return(m); }
max4函数
ruturn max2(max2(max2(a,b),c),d);
int max2(int a,int b) { return(a>b?a:b); } int max4(int a,int b,int c,int d) { int max2(int a,int b);
ruturn max2(max2(max2(a,b),c),d); }
int max2(int a,int b) { return(a>b?a:b); } #include
max=max4(a,b,c,d); …… }
7.6 函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。 C语言的特点之一就在于允许函数的递归调用。 f2函数
调用f1函数
7.6 函数的递归调用 int f(int x) {
int y,z;
z=f(y); return (2*z); }
f函数
调用f函数 f1函数
调用f2函数
应使用if语句控制结束调用 直接调用本函数 间接调用本函数 7.6 函数的递归调用
例7.6 有5个学生坐在一起
问第5个学生多少岁?他说比第4个学生大2岁 问第4个学生岁数,他说比第3个学生大2岁 问第3个学生,又说比第2个学生大2岁 问第2个学生,说比第1个学生大2岁 最后问第1个学生,他说是10岁 请问第5个学生多大 7.6 函数的递归调用 解题思路:
要求第5个年龄,就必须先知道第4个年龄 要求第4个年龄必须先知道第3个年龄 第3个年龄又取决于第2个年龄 第2个年龄取决于第1个年龄
每个学生年龄都比其前1个学生的年龄大2 7.6 函数的递归调用 解题思路: age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10 age(5) =age(4)+2 age(4) =age(3)+2 age(3) =age(2)+2 age(2) =age(1)+2 age(1) =10 age(2) =12 age(3) =14
age(4) =16 age(5) =18 回溯阶段 递推阶段 age(5) =age(4)+2 age(4) =age(3)+2 age(3) =age(2)+2 age(2) =age(1)+2 age(1) =10 age(2) =12 age(3) =14 age(4) =16 age(5) =18 回溯阶段 递推阶段
结束递归的条件 #include
{ int age(int n);
printf(\ return 0; }
int age(int n)
{ int c; if(n==1) c=10;
else c=age(n-1)+2; return(c); }
age(5)
输出age(5) main
c=age(4)+2 age函数