函数(二)--递归
1.函数的调用方式
1.将函数作为表达式调用
int add(int x,int y){
retuen x+y;
}
int sum =add(100,200)
printf("sum=%d",sum);
2.将函数作为语句调用
printf()
3.将函数作为实参调用
printf("%d ",max(100,150));
2.递归
条件::1.一定有一个终止条件
2.包含他自己
一些问题
1+2+3+...+100的和
int sum(int n){
if(n==1){return 1;}
else{
return n+sum(n-1);}
}
!n
int jiecheng(int n){
if(n==0){return 1;}
else {return n*jiecheng(n-1);}
}
兔子数列(斐波那契数列)
1 1 2 3 5 8 13 21
int tuzi(int n){
if(n==1||n==2){return 1;}
else{
return n+tuzi(n-1);
}
}
有n个人排成一队,问第n个人多少岁,他回答比前面一个人大2岁,再问前面一个人多少岁,他回答比前面一个人大2岁,一直问到最后问第一个人,他回答10岁
int age(int n)
{
int i;
if (n == 1)
i = 10;
else
i = age(n - 1) + 2;
return i;
}
汉诺塔
void hnt(int n,char a, char b,char c,){
if (n==1)
{printf("%c->%c
",a,c);}
else{
hnt(n-1,a,c,b);
printf("%c->%c
",a,c);
hnt(n-1,b,a,c);
}
}
/*hnt(3, a, b, c) {
1..hnt(3 - 1, a, c, b) = {
hnt(2 - 1,a,b,c) = {a->c}
a->c = {a->b}
hnt(2 - 1,c,a,b) = {c->b}
}
2..a->c
3..hnt(3 - 1, b, a, c) = {
hnt(2 - 1,b,c,a) = {b->a}
a->c = {b->c}
hnt(2 - 1,a,b,c) = {a->c}
}*/
/*
hnt(4, a, b, c) =
{
1...hnt(4 - 1,a,c,b) =
{
1..hnt(3 - 1,a,b,c) =
{
1. hnt(2-1,a,c,b)
2. a->c
3. hnt(2-1,b,a,c)
}
2..a->b
3..hnt(3 - 1,c,a,b) =
{
1.hnt(2-1,c,b,a)
2.c->b
3.hnt(2-1,a,c,b)
}
}
2...a->c
3...hnt(4 - 1,b,a,c) =
{
1..hnt(3 - 1,b,c,a) =
{
1. hnt(2-1,b,a,c)
2. b->a
3. hnt(2-1,c,b,a)
}
2..b->c
3..hnt(3 - 1,a,b,c) =
{
1.hnt(2 - 1,a,c,b)
2.a->c
3. hnt(2 - 1,b,a,c)
}
}
}
*/