我正在尝试解决有关R中斐波那契数列的练习。症结在于这些动物是致命的。 目标是输入3个变量(寿命,总寿命,后代数量)。动物需要1个时间单位才能成熟。为了解决这个问题,我在第一行中创建了一个带有计时器的矩阵,在第二行中创建了后代对的数量,然后是成熟对,然后是后代与成熟对的总和。通过从成年动物中减去“ i”个月前出生的动物数(i =寿命)来考虑死亡率。
vec <- vector()
wabbits3 <- function(i,k,l) {
wabbits3_chabo(i,k,l,1,0, vec, 1, i)
}
wabbits3_chabo <- function(i,k,l,m,n,t,o,p){
if (k == 0) {print(t)}
else if (p == 1) {wabbits3_chabo(i, (k-1), l,
((n+m-(t[2,(ncol(t)-i+1)]))*l),
(n+m-(t[2,(ncol(t)-i+1)])),
cbind(t, c((o),
(m),
(n),
(m+n))),
(o+1),
1)}
else {wabbits3_chabo(i, (k-1), l,
(n*l),
(n+m),
cbind(t, c((o),
(m),
(n),
(m+n))),
(o+1),
(p-1))}
}
现在,提出一个实际问题:如果我测试数字wabbits3(365, 6, 1)
,则它永远不会进入else if分支,因为它永远不会达到p = 1,并且一切正常。
但是,当选择较小的数字(wabbits3(3, 6, 1)
)时,它将进入else if
分支,并且附加的“ (m+n)
”不再起作用。
cbind
命令在“ if
”和“ e lse if
”分支中是完全相同的,那么为什么它两次都不起作用?
wabbits3(365, 6, 1)
的结果:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6
[2,] 1 0 1 1 2 3
[3,] 0 1 1 2 3 5
[4,] 1 1 2 3 5 8
(第二行和第三行之和,显示在第四行)
wabbits3(3, 6, 1)
的结果
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6
[2,] 1 0 1 4 5 6
[3,] 0 1 1 4 5 6
[4,] 1 1 2 4 5 6
(一旦进入else if
分支(在第四列中),第二行和第三行的添加将不再起作用)
我的问题可以理解吗?有什么不清楚的地方吗? 预先感谢!
PS .:我敢肯定我的代码中还会有其他错误,但是我更愿意自己找那些。现在,我只是感到困惑,为什么像加法一样简单的东西却无法正常工作...
编辑:原来,仅使用rbind(当然在两个分支中)似乎都可以解决问题……但是为什么?!