// 递归调用add函数实现1+2+3。。。。+100的值
// 函数实现过程,i=1,累加i,并且判断i的值是否等于100,如果等于,则直接返回累加结果s
//如果不满足i等于100,则执行 return add(++i); i自增,调用add(2),再将s加上2,这样s一直加到100 ,再返回s的最终结果。
【例1】
#include <stdio.h>
int add(int i);
int main()
{
int s,i=1;
s=add(i);
printf("%d\n",s);
_getch(); //暂停屏幕
}
int add(int i)
{
static int s=0; //为了保证每次调用 add()函数时,将s赋值为0,所以应加上static
s=s+i;
if(i==100) return s;
return add(++i);
}
// 求fibnbcci数列
【例2】
// 求fibnbcci数列
【例2】
#include <stdio.h>
int fun(int n);
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
_getch();
}
int fun(int n)
{
long f;
if(n==0||n==1) f=1;
else f=fun(n-1)+fun(n-2);
return f;
}
【例3】求两数的最大公约数
//算法:1.求p=m%n
2.若p=0,则n为所求值
3.若p!=0,则将n赋值给m,将m%n赋值给n
4.直到m%n=0为止
#include <stdio.h>
#include <stdlib.h>
int gys(int m,int n); //公约数 函数声明
int gbs(int m,int n); //公倍数 函数声明
int main()
{
int m,n,p,q;
scanf("%d%d",&m,&n); #xa0;
p=gys(m,n); //调用函数
printf("最大公约数:%d \n",p);
q=gbs(m,n);
printf("最小公倍数:%d\n",q);
return 0;
}
int gys(int m,int n)
{
int p; //p保存最大公约数
if(m%n==0) //如果能除尽,则n为m,n的最大公约数
p=n;
else
p=gys(n,m%n); //不能除尽,则再次调用gys函数,此时,n的值传递给m,m%n的值传递给n,直到m%n等于0
return p; //返回p
return 0;
}
int gbs(int m,int n) //最小公倍数
{
int k;
k=gys(m,n); //调用最大公约数的结果
m=m/k; //将m除以最大公约数
n=n/k; //n除以最小公倍数
return k*m*n; //返回k*m*n,就是最小公倍数
}
【例子4】 汉诺塔问题
1. #include<stdio.h>
2. static int count=0;
3. void hanoi(char a,char b,char c,int n)
4. {
5. if(n==1)
6. {
7. printf("%c->%c\n",a,c);
8. count++;
9. }
10. else
11. {
12. hanoi(a,c,b,n-1);
13. printf("%c->%c\n",a,c);
14. count++;
15. hanoi(b,a,c,n-1);
16. }
17. }
18. void main()
19. {
20. int n;
21. scanf("%d",&n);
22. hanoi('A','B','C',n);
23. printf("共%d次\n",count);
24. }