当前位置:文档之家› C语言实验六实验报告.doc

C语言实验六实验报告.doc

高级语言程序设计上机实验报告
一、实验目的
1.理解递归问题基本思想
2.学会编写递归程序,理解递归何时结束。

3、清楚明白结束条件无法满足的递归程序将导致无穷递归的情况发生。

二实验题目
1.计算游戏人员的年龄
有5个人围坐在一起,问第5个人多大了年纪,他说比第4个人大2岁:问第4个人多大年纪。

他说比第3个人大2岁;问第3个人多大年纪,他说比第2个人大2岁;问第2个人多大年纪,他说比第1个人大2岁。

第1个人说自己10岁,问第5个人多大年纪。

(1)程序源代码:
#include <stdio.h>
unsigned int ComputeAge(unsigned int n);
void main ()
{
unsigned int n =5;
printf("The 5th person's age is %d\n",ComputeAge(n));
}
unsigned int ComputeAge(unsigned int n)
{
unsigned int age;
if (n==1)
{
age =10;
}
else
{
age =ComputeAge(n-1)+2;
}
return age;
}
(2)运行结果
2.计算最大公约数
利用计算最大公约数的三条性质,用递归方法计算两个整数的最大公约数。

性质1 如果x>y, 则x和y的最大公约数与x-y和y的最大公约数相同,即 gcd(x,y)=gcd(x-y,y)(x>y)
性质2 如果y>x,则x和y的最大公约数与x和y-x的最大公约数相同,即 gcd(x,y)=gcd(x,y-x)(x<y)
性质3 如果x=y,则x和y的最大公约数与x的值和y值相同,即
gcd(x,y)=x=y
(1)程序源代码
#include <stdio.h>
int MaxCommonFactor(int a, int b);
void main()
{
int x,y,z;
printf("Please int x, y:");
scanf("%d, %d", &x, &y);
z=MaxCommonFactor(x, y);
printf("The max common factor = %d\n", z);
}
int MaxCommonFactor(int a, int b)
{
if (a<=0 ||b <=0)
return -1;
if (a == b)
{
return a;
}
else if (a>b)
{
return MaxCommonFactor(a-b, b);
}
else
{
return MaxCommonFactor(a, b-a);
}
}
(2)运行结果
3.设计一个函数MaxCommonFactor(),利用欧几里德算法(也称辗转相除法)计算两个正整数的最大公约数
(1)程序源代码
#include <stdio.h>
#include <stdlib.h>
int MaxCommonFactor(int a,int b);
int main(void)
{
int a,b,x;
printf("Please input a,b:");
scanf("%d, %d",&a,&b);
z=MaxCommonFactor(a,b);
if(x !=-1)
{
printf("MaxCommonFactor= %d\n",x);
}
else
{
printf("Input error!\n");
}
return 0;
}
int MaxCommonFactor(int a,int b)
{
int r;
if(a<=0||b<=0)
return -1;
do{
r=a%b;
a=b;
b=r;
}while(r !=0);
return a;
}
(3)运行结果。

相关主题