伪代码编程步骤
决定如何测试子程序,测试用例,测试驱动开发
在程序库中寻找已经实现的接口类
考虑下错误处理
考虑效率问题,这个实践中需要进一步验证,看到底效率在什么情况下重要,什么时候考虑优化代码。
研究算法和数据类型
编写伪代码,这个我个人习惯是在纸上写出伪代码,在伪代码逻辑没有走通的情况下,不要下手写代码,
这样只会东拼西凑,在编写的过程中,纠结与细节,迷失目的。
编写好伪代码后检查list:
检查接口,参数是否合理,参数是否都用到了
检查设计,是否解耦和等
检查循环与逻辑,是否存在死循环的情况,是否有off by one的错误,时候资源泄露,错误的嵌套
循环体的控制摘要
计数循环,即固定次数的循环
连续求职循环,即带退出的循环,通过break continue关键字
无线循环
迭代器循环
在循环的判断条件中可使用德摩根定律简化代码
- 非(P 且 Q)=(非 P)或(非 Q)
- 非(P 或 Q)=(非 P)且(非 Q)
一个循环只做一件事,如果用两个循环效率会低下,可以先写上注释合并效率会高,等测试数据需要优化时再去合并他们
安全计数器,安全计数器就是一个变量,在每次循环的时候数值加一,在循环内做一个判断,如果这个值超出预先设置的一个最大阈值,退出循环。是一种保证安全的策略
break,和continue的解释,他们只能作用于最内层的循环,对外层的嵌套不起作用,详细用法:http://blog.youkuaiyun.com/luoweifu/article/details/10756017
一种使用continue的好方法是,在循环处做完条件判断后让代码越过剩下的循环体继续执行,这样可以避免{}缩进
递归实现迷宫,使用递归能实现的程序也可以用栈和循环来实现。使用递归的地方应该留意栈空间的分配,可使用安全计数器来测试,解决占空间溢出的可能。
表驱动法:
一个简单的例子一年中每个月的天数,如果需要写if else的话会非常的冗长,
可以把数值存储在一个数组中,这样用arr[month-1]=days