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;
}