假设您正在使用明显的蛮力算法生成斐波那契数。如果我知道我想提前生成的斐波那契数,我可以使用幂和^:做这样的事情:

(, [: +/ _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/

10-10 07:24