一、递归:
递归四条基本法则:
1、基准情形。必须总要有某些基准情形,它无需递归就能解出。(即递归中用于跳出)
2、不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使状况朝向基准情形推进。
3、设计法则。假设所有的递归调用都能运行。
4、合成效益法则。在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作。
二、程序运行时间估算:
法则1:for循环
一个for循环的运行时间至多是该for循环内部那些语句(包括测试)的运行时间乘以迭代的次数。
法则2:嵌套for循环
从里向外分析这些循环。在一组嵌套循环内部的一条语句总的运行时间为该语句的运行时间程颐该组所以for循环的大小的乘积。
法则3:顺序语句
将各个语句运行时间求和即可
法则4:if/else语句
一个if/else语句的运行时间从不超过判断的运行时间加上S1和S2中的运行时间长者的运行时间。
常见的时间:赋值、条件判断都是O(1).
对数法则:如果一个算法用常数时间(O(1))将问题的大小削减为其一部分(通常是1/2),那么该算法就是O(logN)。另一方面,如果使用常数时间只是把问题减少一个常数的数量(如将问题减少1),那么这种算法是O(N)的。
二分查找时,每次循环内的工作为O(1),最坏需要执行循环次数为[log(N-1)]+2,所以为O(logN)的。
欧几里得算法:(直接网上贴一个)求两个数的最大公约数,大数除小数取余数,小数与余数取余。直到余数为0为止,最大公约数为除数。