1
zpavel OP 求各位长者给点人生经验嘛
|
2
alphadog619 2016-06-21 15:51:54 +08:00
懵逼正常!一个知识点多看几遍,我也是初学 python
|
3
Xs0ul 2016-06-21 15:55:46 +08:00 via Android
斐波那契和杨辉三角只是单纯的定义吧?
|
4
xiahei 2016-06-21 15:57:41 +08:00
找书看,
拒绝廖雪疯, 别光看, 多练,多练,多练 多写代码,多写代码,多写代码。 学会跳, n 遍之后还不会,跳过吧,下次再来。 |
5
vinceguo 2016-06-21 16:05:52 +08:00 via Android 1
斐波那契和杨辉三角都搞不清么?初中生?小学生?好可怕
|
6
Chrisplus 2016-06-21 16:08:09 +08:00 1
先玩玩汉诺塔?
体会一下? http://www.7k7k.com/swf/335.htm |
7
eamon666 2016-06-21 16:09:41 +08:00
吓尿
|
8
clino 2016-06-21 16:09:50 +08:00 via Android
你是让大家猜猜看你的疑惑到底在哪里是吗?
|
10
zpavel OP @clino 额,好像是没说清楚。我的意思是,斐波拉契数列和杨辉三角规律我知道,但是表达式看的我有点晕。比如 a, b = b, a + b ,把 b 赋给 a ,再把 a+b 赋给 b (这是 b 以 a 值累加对吧?),然而合在一起就有点懵了。
|
11
zpavel OP @Chrisplus 太感谢了,昨天确实碰到这个了。刚玩了一下,会玩,但是如果让我写出来的话,就难了。。。我想是不是我在思路这一块出了点问题。
|
12
sxmman 2016-06-21 16:17:21 +08:00
简单的算法是逻辑,复杂的算法就全是数学了。比如求两个数的最大公约数,
72 64 : mod(72, 64) = 8, mod(64, 8) = 0, so 8 88 64: mod(88, 64) = 24, mod(64, 24) = 16, mod(24, 16) = 8, mod(16, 8) = 0, so 8 |
14
practicer 2016-06-21 16:51:38 +08:00 1
我也是新手,要理解这几个例子前先要理解递归思想,它的根本思想是递归。而你贴的教程是为了让你理解生成器,生成器已经属于 python 编程的高级主题,因此,两点累积到一起,不懵逼才怪。另外,我不赞成用它们作为初学教程的例子,除了基础好的人,零经验的人(比如我)学的时候基本都是懵逼脸。
既然根本思想是递归,暂且不看斐波拉,先找 一个简单的递归函数来理解。 要实现一个递归函数,都需要哪些条件。 So ,先看这个简单递归函数的例子: def fact(n): if n == 0: return 1 else: return n * fact(n-1) 手动推到 fact(5)等于多少(廖大大也有这个例子) fact(5): 由于 5 不等于 0, fact(5) = 5 * fact(4) 那么, fact(4)是多少? fact(4): 由于 4 不等于 0, fact(4) = 4 * fact(3) 那么, fact(3)是多少? fact(3): 由于 3 不等于 0, fact(3) = 3 * fact(2) 那么, fact(2)是多少? fact(2): 由于 2 不等于 0, fact(2) = 2 * fact(1) 那么, fact(1)是多少? fact(1): 由于 1 不等于 0, fact(1) = 1 * fact(0) 那么, fact(0)是多少? fact(0): 现在, 0 等于 0, 因此 fact(0) is 1 也就是说, fact(n)的参数为零时,递归终结。 把以上的结果整合起来,得到最终结果 fact(5) = 5* fact(4) fact(5) = 5 * 4 * fact(3) fact(5) = 5 * 4 * 3 * fact(2) fact(5) = 5 * 4 * 3 * 2 * fact(1) fact(5) = 5 * 4 * 3 * 2 * 1 * fact(0) fact(5) = 5 * 4 * 3 * 2 * 1 * 1 = 120 经过这个例子,得到实现递归函数的两个条件: 1.必须有一个终结递归的条件,专业术语叫递归出口 2.递归函数的函数体必须要调用函数自身 对照这个例子,再来看斐波拉就没那么懵逼了,这是递归版的斐波拉例子: def fib(n): if n > 1: return fib(n-1) + fib(n-2) return n 最后奉劝楼主不要着急,现在看算法书没什么用的,有些算法没有遇到实际场景是很难理解的,当遇到这种例子时,不妨先放着,等你多打一些代码,多做一些项目后再来理解,到那时候理解起来便很快了。 |
18
SuperFashi 2016-06-21 18:35:25 +08:00 via Android
下面那道题多简单啊,你看:
return [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1], [1, 6, 15, 20, 15, 6, 1], [1, 7, 21, 35, 35, 21, 7, 1], [1, 8, 28, 56, 70, 56, 28, 8, 1], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]] 就可以 ac 了~ |
19
xucuncicero 2016-06-21 18:53:47 +08:00
我的原则是实用至上,很多算法是在使用中弄明白的。
以前只会 vba 的时候,经常用 excel 处理一些问题,有时候不知道怎么处理,上午搜一下一般会遇到别人已经研究过的模型,再简化 /推广一下就是某个非常著名的算法,把自己的问题解决完了,一般这个算法也掌握的差不多了,可以开始举一反三了。单纯给我个算法让我看我是没那个耐心的。 现在用 python 多一点,但这个处理流程已经成习惯了,感觉挺有效的。我是不太建议死啃算法书的,当然如果是学生就是另一回事了。 |
22
nan0kai 2016-06-21 20:48:48 +08:00
@Chrisplus Game #1: 12 moves.
Game #2: 7 moves. Game #3: 9 moves. Game #4: 7 moves. Game #5: 31 moves. Game #6: 21 moves. Game #7: 56 moves. Game #8: 273 moves. 真心累.... |
28
incesa 2016-06-22 11:43:36 +08:00
@incesa 补充:我刚开始看的时候看的 python 核心编程,刚开始也觉得很看着很无聊,但是看几章以后觉得还可以。看完这本了在看廖学峰的教程感觉效果更好
|
29
kimgo110 2016-06-22 21:50:57 +08:00
让我不禁想到当年竞赛用 Pascal 写上边所讲的东西,虽然早已不接触编程了。
|
30
peneazy 2016-06-22 21:54:42 +08:00 via Android
初学都这样。最近两周学习设计模式,同时又研究部门老大写的业务代码,编程感觉提升了很多。多思考,多练习。
|