数据结构与算法,c语言实现,经典算法记录之欧几里得算法,裴波那切数和动态规划。

1.欧几里得算法:


题目:找出两个整数的最大公因子。


解析:作为有2000年历史的最古老的著名算法之一,使用递归方法实现欧几里得算法,原则为,两个整数x和y且x>y的最大公因子等同于y与x % y 的最大公因子。


c语言代码:


int gcd(int m,int n)

{

if( 0 == n ) return m;

return gcd( n,m % n );

}


2.裴波那切数


题目:对于给定数i,求其裴波那切数


解析:裴波那切数列:1,1,2,3,5,8,13,21,。。。


方法1:递归实现

c语言代码

int  F(int i)

{

if( i < 1 ) return 0;

if( 1 == i) return 1;

return F( i - 1 )+F( i - 2 );

}


方法2:自底向上的动态规划

首先计算前N个数,并把他们存储在一个数组中,则为线性时间。

int F( int i )

{

F[0] = 0;

F[1] = 1;

for( i = 2; i <= N ; i ++)

{

 F[ i ] = F[i - 1]+ F[i - 2];

}

}


方法3:自顶向下的动态规划

通过把所计算的值存储在递归过程的外部数组中,明确避免重复计算。

int F(int i)

{

int t;

if( 0 == i) t = 0;

if (1 == i) t = 1;

if (i > 1 ) t = F(i - 1 )+F(i - 2);

return knownF[i] = t;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值