Is there a J idiom for adding to a list until a certain condition is met?
但是我无法获得使用OP的功能或我自己的功能的答案.
我将重新表述该问题,并在底部写出答案.
我正在尝试创建一个函数,该函数将返回小于2.000.000的斐波那契数字列表. (无需在函数内部写入“ while”).
这是我尝试过的:
首先,我从该站点选择了一种计算斐波那契数的方法:
https://code.jsoftware.com/wiki/Essays/Fibonacci_Sequence
fib =: (i. +/ .! i.@-)"0
echo fib i.10
0 1 1 2 3 5 8 13 21 34
然后我做了一个任意列表,我知道这个列表比我需要的要大. :
fiblist =: (fib i.40) NB. THIS IS A BAD SOLUTION!
最后,我删除了超出所需数量的数字:
result =: (fiblist < 2e6) # fiblist
echo result
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1.34627e6
这样可以得到正确的结果,但是有一种方法可以避免使用某些任意数字,例如
“ fib i.40”中的40?
我想编写一个函数,以便“ func 2e6”返回低于2.000.000的斐波那契数字的列表. (无需在函数内部写入“ while”).
echo func 2e6
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1.34627e6
这是另一个问题的答案:
第一个答案:
2 *^:(100&>@:])^:_"0 (1 3 5 7 9 11)
128 192 160 112 144 176
第二个答案:
+:^:(100&>)^:(<_) ] 3
3 6 12 24 48 96 192
据我了解,我只需要替换答案中使用的功能,但是我不知道如何
可以的.例如,如果我尝试:
echo (, [: +/ _2&{.)^:(100&>@:])^:_ i.2
我得到一个错误.
f0b=: (-&2 +&$: -&1) ^: (1&<) M.
掌握了这些信息后,我只想将其放入动词中,即可检查f0b的结果是否小于某个量(我使用了1000),如果是,那么我增加了输入量并再次进行了处理.这是($:@:> :)部分. $:是自参考.右边的0参数是生成序列的起点.
($:@:>: ^: (1000 > f0b)) 0
17
这告诉我,第17个斐波那契数是最大的数,比我的限制小.我使用该信息通过将f0b应用于i中的每个项目来生成斐波那契数. ($:@:> ;: ^:(1000> f0b))0,使用等级0(fob“ 0)
f0b"0 i. ($:@:>: ^: (1000 > f0b)) 0
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
在您的情况下,您想要2000000以下的
f0b"0 i. ($:@:>: ^: (2000000 > f0b)) 0
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269
…然后我意识到您想要一个动词来回答您的原始问题.我使用dyadic,左参数为极限,右参数生成序列.同样的想法,但是当我使用默认形式时,我能够使用一些钩子. (> f0b)检查f0b的结果是否低于限制,并且($:> :)递增右参数,同时允许$保留左参数:
2000000 (($: >:) ^: (> f0b)) 0
32
fnum=: (($: >:) ^: (> f0b))
2000000 fnum 0
32
f0b"0 i. 2000000 fnum 0
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269
我毫不怀疑其他人会提出更好的解决方案,但这就是我今晚凑齐的.
相关文章
转载注明原文:fibonacci-获取函数结果列表,直到结果> x - 代码日志