
function* fib(max){ var t, n = 1, a = 0, b = 1; while ( n<max ){ yield a; t = a+b; a = b; b = t; n++; } return a; } 而Python可以直接这么粗暴的写
def fib(nmax=None): nmax = nmax or 10 n, a, b = 0, 0, 1 while n < nmax: yield a a, b = b, a+b n += 1 然后把我搞晕了,我都不会写fibonacci了,为什么JS还需要个临时变量t, 如果 a, b = b, a+b结果是不正确的,然后为什么在循环体外还需要return返回最后的结果
1 FrankFang128 2015-07-05 10:52:27 +08:00 via Android 你用 python 不就好了。你推动各大浏览器厂商改进JS语法也可以哦。 |
2 zonghua 2015-07-05 10:56:08 +08:00 好厉害,斐波那契都会算哦 |
3 cc7756789 OP 额,没有攻击语言的意思,只是搞不懂内部的原理。 |
4 loading 2015-07-05 10:58:53 +08:00 看下 go ,只有 for ,也挺好的。 |
5 laurent 2015-07-05 11:06:17 +08:00 Javascript初始化的n是1,python是0,所以最后要return Javascript好像是不支持多返回值,所以需要用临时变量t |
6 pH 2015-07-05 11:13:26 +08:00 小白,为什么function后面有个* |
7 Garwih 2015-07-05 11:19:53 +08:00 不用临时变量你可以这么写: b = a + b; a = b - a; |
8 sciooga 2015-07-05 11:21:00 +08:00 这样就不用 t 了 |
9 sciooga 2015-07-05 11:22:26 +08:00 |
10 little_cup 2015-07-05 11:23:30 +08:00 也不能要求各个语言都有这样类似py元组的语法糖呀…… |
11 ispinfx 2015-07-05 11:25:13 +08:00 为什么nmax不直接写默认值? |
12 vv314 2015-07-05 11:31:59 +08:00 Javascript与Python语法是有区别的, 在js里如果“a, b = b, a+b”这样写,相当于执行了三条语句: a; b = b; a + b; |
14 keyanzhang 2015-07-05 11:55:16 +08:00 |
15 mangocool 2015-07-05 11:56:46 +08:00 会写scala么 |
16 des 2015-07-05 14:15:08 +08:00 @keyanzhang firefox对ES6支持最全吧 |
17 keyanzhang 2015-07-05 15:28:24 +08:00 @des 用 babel 编译。 |
18 zhuangzhuang1988 2015-07-05 16:52:45 +08:00 试试Coffeescript!!! |
19 imn1 2015-07-05 17:46:47 +08:00 你应该先了解 python 的 a, b = b, a+b 实际上是 (a, b) = (b, a+b) 元组省略括号的写法 看上去像是其他语言swap函数,但实际上不是 |
21 mingyun 2015-07-12 20:25:25 +08:00 @keyanzhang 求网址 浏览器不支持运行es6 |
22 keyanzhang 2015-07-14 10:35:40 +08:00 |