算法学习:递归

2018年即将结束,暂新的一年扑胸而来。作为一个程序员,工作中的编程都是和业务相关,很少涉及到算法。找工作面试的时候,算法编程是绕不过去的门槛。有一句话形容面试关节:“面试时考技术总监的难度,干活时拧螺丝钉的难度。”算法能力还是要有的,万一失业了,需要重新找工作呢?万一要指导娃参加信息学奥赛呢?

上班的路上,和老公说了我的学习算法想法,老公有兴趣和我一起学习,并且承诺每天晚上拿出半个小时的时间和我一起学习编程算法。

老公在公司里面业务能力强,但是对于算法掌握不牢固,他一向认为知道算法的思想就可以了,遇到具体问题,再去查资料。有这种想法的人很多,学生时代的表现就是不愿意背数学公式,考试时现场推公式。这种人的思维逻辑和智商是牛逼的,可是考试时间有限,他们拿不到班级或年级最高分,还总觉得比他们分数高的人智商不如他们。他们部门一个业务水平不如他的家伙去了马爸爸的公司做资深技术专家的岗位,推荐他过去面试,结果第一轮技术面试就被淘汰了,真是丢人。他就死在基础的算法题目上。

苹果公司的IOS之父去谷歌公司面试,现场没有写出解决“八皇后问题”的算法程序,被面试官拒绝。大牛在网上吐槽IT公司不合理的面试制度,引发大量程序员的共鸣。

综上所述,熟练掌握算法的重要性不言而喻。


第一天要攻克的知识点:递归算法。

典型问题:

1. 汉诺塔(hanio)问题

2. 登台阶问题

一个人登台阶,可以一次等一级台阶,也可以一次登两级台阶,那么请问登上10级台阶有多少种方法?

3. 阶乘问题

factorial(10)=?

解题思路:

1. 写出递推公式。2. 写出边界条件。3. 将1和2翻译成代码。

参考答案:

汉诺塔问题:

def hanoi(n,source,middle,dest):

    if n==1:

        print "%s--->%s"%(source,dest)

    else:

        hanoi(n-1,source,dest,middle)

        hanoi(1,source,middle,dest)

        hanoi(n-1,middle,source,dest)

print "hanoi:4 layers, source:A, dest:C"

hanoi(4,"A","B","C")

print "hanoi:4 layers, source:C, dest:A"

hanoi(4,"C","B","A")

参考文献:

公众号:算法爱好者:通过动画轻松理解递归与动态规划。

你可能感兴趣的:(算法学习:递归)