递归算法的设计与实现实验报告-read
递归算法的设计与实现实验报告
一、实验目的:
a)掌握递归算法的基本思想及其与数学归纳法的关系;
b)掌握递归算法设计与实现。
二、实验内容
a)用递归算法计算n!;
b)用递归方法求非负整数a和b(a,b不全为0)的最大公约数。
三、实验要求
a)用伪代码计算n!和求非负整数a,b(a,b不全为零)的最大公约数的递归算法;
b)用C++语言实现算法并测试通过;
c)比较采用欧氏算法和递归算法求非负a,b(a,b不全为零)的最大公约数的执行效率。
四、(一)使用递归算法求n!的伪代码表示:
1.Procedurefactorial (n)
2. if n= = 0 then
3. return (1)
4. return (n * factorial (n-1))
5. end
(二)使用递归算法求非负整数a和b(a,b不全为0)的最大公约数的伪代码表示:
输入:a和b(不全为0的非负整数)
输出:a和b的最大公约数
1. Procedure gcd_recurs (a, b)
2. if a
3. swap (a, b)
4. if b = 0 then
5. return (a)
6. a 除以 b 得到 a = bq + r ,0 £ r < b
7. redurn (gcd_recurs (b, r))
8. end gcd_recurs
五、(一)使用递归算法求n!的C语言实现:
#include"stdio.h"
long fac(int n)
{
long result;
if(n==0||n==1)
result=1;
else
result=n*fac(n-1);
return result;
}
main()
{
int x;
long f;
printf("please input one numbers: ");
scanf("%d",&x);
if(x<=0)
printf("ERROR!\n");
else
{
f=fac(x);
printf("%d!=%ld\n",x,f);
}
}
结果截图:
(二)使用递归算法求非负整数a和b(a,b不全为0)的最大公约数的C语言实现:
#include"stdio.h"
int gcd(int a,int b)
{
int temp,c;
if(a
{
temp=a;
a=b;
b=temp;
}
if(b==0)
return a;
else
{
c=a%b;
return(gcd(b,c));
}
}
main()
{
int a,b;
printf("please input two numbers:\n");
scanf("%d%d",&a,&b);
printf("gcd(%d,%d)=%d\n",a,b,gcd(a,b));
}
结果截图:
六、比较采用欧氏算法和递归算法求非负a,b(a,b不全为零)的最大公约数的执行效率。
答:递归是子程序调用,而欧式算法则是通过执行循环语句得以实现。程序调用要耗费很多空间和时间。对同样问题的求解,欧式算法都比递归有效率得多。递归只是从形式上,逻辑比较简洁。
本文介绍了递归算法的实验报告,包括递归算法的基本思想、与数学归纳法的关系及其实现。具体实验内容包括用递归算法计算阶乘n!和求非负整数a、b的最大公约数。提供了两种情况的伪代码表示,并使用C语言实现了算法。
3678

被折叠的 条评论
为什么被折叠?



