c语言递归算法实验报告,递归算法的设计与实现实验报告-read.doc

本文介绍了递归算法的实验报告,包括递归算法的基本思想、与数学归纳法的关系及其实现。具体实验内容包括用递归算法计算阶乘n!和求非负整数a、b的最大公约数。提供了两种情况的伪代码表示,并使用C语言实现了算法。

递归算法的设计与实现实验报告-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不全为零)的最大公约数的执行效率。

答:递归是子程序调用,而欧式算法则是通过执行循环语句得以实现。程序调用要耗费很多空间和时间。对同样问题的求解,欧式算法都比递归有效率得多。递归只是从形式上,逻辑比较简洁。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值