如果这是一个愚蠢的问题,我真的很抱歉,但我对netlogo很新,我在别处找到的建议似乎不适用于我的情况;问题是:
如何在netlogo中的重复循环中存储和打印变量的所有值?
let x 1
let y 1
let i n - 2
repeat i [let z (x + y) set x y set y z ]
let list1 (list x y)
print list1`
此代码现在正在制作并打印一个仅包含x和y的最后两个值的列表 - 如何保存并打印x和y在循环中的所有值?
我真的很抱歉
答案 0 :(得分:3)
to test-fib [#n]
let x 1
let y 1
let xs (list x)
let ys (list y)
let i (#n - 2)
repeat i [
let z (x + y)
set x y
set y z
set xs lput x xs
set ys lput y ys
]
print xs
print ys
end
但最好是使用记者。假设您至少需要两个项目:
to-report better-fib [#n]
let x_2 0
let x_1 1
let fibs (list x_2 x_1)
repeat (#n - 2) [
let x (x_2 + x_1)
set fibs (lput x fibs)
set x_2 x_1
set x_1 x
]
report fibs
end
使用一点递归可能很有趣:
to-report fun-fib [#n]
if (#n = 0) [report []]
if (#n = 1) [report [0]]
if (#n = 2) [report [0 1]]
let f1 (fun-fib (#n - 1))
let x_1 last f1
let x_2 last butlast f1
report lput (x_2 + x_1) f1
end
如果您不想要,可以随时删除初始项目。
答案 1 :(得分:1)
如果您只想计算fib序列并获取列表中的数字,您可能需要考虑这一点。我想请注意,你的x列表和y列表是fib序列的子集。它是Alan提到的递归情况的替代方案,它比重复语句更清晰:
to-report fib [n]
if n < 2 [ report n-values (n + 1) [?]] ;; consider base case
report reduce [sentence ?1 ((last ?1) + (last (but-last ?1))) ] (fput (list 0 1) (n-values (n - 1) [?]))
end