第11章算法设计与分析;11.1算法设计;通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性、可靠性、简单性和易理解性。其次是算法所需要的存储空间少和执行更快等因素。;一、递归算法;一般递归具有如下的形式:
if(递归结束条件)
{ //递归结束条件成立,结束递归调用
递归结束部分;
}
else
{ //递归结束条件不成立,继续进行递归调用
递归调用部分;
}
或
if(递归调用条件)
{ //递归调用条件成立,继续进行递归调用
递归调用部分;
}
[else
{ //递归调用条件不成立,结束递归调用
递归结束部分;
}];例:用递归求阶乘n!。
阶乘可用迭代表示如下:;例:Fibonacci数列递归算法。
无究数列:0,1,1,2,3,5,8,13,…,称为Fibonacci数列,可以迭代定义为:;二、分治算法;例:Hanoi塔问题;;voidHanoi(intn,chara,charb,charc)
//操作结果:将a塔座上的直径由小到大,至上而下编辑为
// 1至n的n个盘子按规则移到塔座c上,塔座b可用作
// 辅助塔座
{
if(n0)
{ //递归条件成立
Hanoi(n-1,a,c,b);//将a塔座上编号为1至
//n-1的圆盘移到b塔座,c作辅助塔座
cout编号为n的盘子从
a塔座移到c塔座
endl;
//将编号为n的圆盘从a塔座移到c塔座
Hanoi(n-1,b,a,c);//将b塔座上编号为1至
//n-1的圆盘移到c塔座,a作辅助塔座
}
};11.2算法分析;递归函数包含递归结束部分和递归调用部分,递归结束部分可以直接解决而不需要再次进行递归调用,递归调用部分则包含对算法的一次或者多次递归调用。一般设T(n)表示规模为n的基本操作的运行次数,不断通过迭代将T(n)转换为递归结束部分,在递归结束时可直接写出T(n)的值;例:分析Hanoi塔问题移动圆盘的次数