假设您正在使用明显的蛮力算法生成斐波那契数。如果我知道我想提前生成的斐波那契数,我可以使用幂和^:
做这样的事情:
(, [: +/ _2&{.)^:20 i.2
当斐波那契达到某个极限时,我该如何停止呢,比如
1e6
? (我知道如何在使用while.
的函数中执行此操作,但这并不有趣。)我想强调,这是关于J的一般问题,而不是关于斐波那契的特定问题。不要对斐波那契数字过于分散注意力。问题的核心是如何在满足某些条件之前一直追加到列表中。
最佳答案
我认为对此的最佳答案是在Henry Rich的《面向C程序员的书》(J)中。具体来说,它使用Power Conjunction ^:
。您也可以使用它来收敛,直到没有变化为止,这样就不需要定义限制了。亨利使用以下示例:
2 *^:(100&>@:])^:_"0 (1 3 5 7 9 11)
128 192 160 112 144 176
重复
^:_
Power联合,直到没有变化,并且^:(100&>@:])
测试结果小于100。如果为odt,则将^:
应用于1
,并再次执行循环2*
,如果不小于100,则^:
为应用于0
并导致它不执行任何操作且不进行任何更改,并且退出循环。它使用"0
作为等级这一事实意味着它可以将加倍函数2*
分别应用于每个1 3 5 7 9 11
。亨利确实比我更好地解释了该过程,因此这里是进一步阅读的引用。
http://www.jsoftware.com/help/jforc/loopless_code_iv_irregular_o.htm#_Toc191734389
关于j - 在满足特定条件之前,是否有J习语可添加到列表中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30542928/