|
|
51CTO旗下网站
|
|
移动端

问与答

《算法精解:C语言描述》第3章 递归,本章介绍递归,这是一种在许多数据结构和算法中都会用到的技术。本节为大家介绍问与答。

作者:肖翔/陈舸 译来源:机械工业出版社|2012-12-06 10:20

问与答

问:下面的递归定义有一个错误。请指出错误并想想该如何修正。给定一个正整数n,其正确的定义通常用来计算分治算法的运行时间,比如归并排序(见第12章)。归并排序将一组数据一分为二,然后分别将两份数据各自再进行分半处理,一直持续这个过程直到每一份都只含一个元素。然后在回归过程中完成各份数据的合并最终产生一个有序的集合。

 
答:该定义的问题在于当n的初始值大于0时将永远无法满足终止条件n=0。为了解决问题,需要一个满足要求的终止条件。n-1这个条件就能很好满足,这意味着也要修改函数中的第二个条件。合适的递归定义应该是这样的:
 

这恰好是归并排序运行时间的正确定义形