假设你用明显的,蛮力的算法生成斐波那契数。如果我知道我想预先生成的斐波纳契的数量,我可以使用power ^:这样做。
(, [: +/ _2&{.)^:20 i.21e6说,当斐波纳契达到某种极限时,我怎么才能停下来呢?(我知道如何使用while.在函数中这样做,但这并不有趣。)
我想强调的是,这是一个关于J的一般性问题,而不是关于Fibonacci的具体问题。不要被斐波那契的数字分心。问题的核心是如何在满足某些条件之前将其附加到列表中。
发布于 2015-05-30 16:08:44
我认为最好的答案是亨利·里奇的“C程序员J”一书。具体来说,它使用Power ^:。您也可以使用它来收敛,直到没有变化,这样就不需要定义限制了。Henry使用的例子是:
2 *^:(100&>@:])^:_"0 (1 3 5 7 9 11)
128 192 160 112 144 176^:_ Power连接会重复,直到没有任何更改,并且^:(100&>@:])测试的结果小于100。如果是,则将^:应用于1,并再次执行循环2*,如果不少于100,则^:将应用于0,结果是它什么也不做,什么也不改变,循环就会退出。它使用"0作为秩,这意味着它可以将加倍函数2*分别应用于每个1 3 5 7 9 11。
亨利确实比我更好地解释了这个过程,所以这里是进一步阅读的参考。Toc191734389
发布于 2015-05-30 16:06:45
Power也有u^:v^:n,其中第二个动词可以用作检查。双倍(+:)而(n是_)小于100 (100&>):
+:^:(100&>)^:_ ] 1
128
+:^:(100&>)^:_ ] 3
192和往常一样,为了附加权力的结果,你把名词框起来:
+:^:(100&>)^:(<_) ] 3
3 6 12 24 48 96 192https://stackoverflow.com/questions/30542928
复制相似问题