我要代表使用遞歸函數(沒有特別的原因,這一事實)多邊形鏈的下列進化:如何寫一個遞歸函數R中有一個列表作爲輸入和輸出
step 1. The chain starts with 2 line segments and is (of course) opened;
step 2. close the polygonal chain with a new line segment;
step 3. open the polygonal chain;
step 4. GOTO 2
我想要得到一個帶有「時間(步數)」,「鏈狀態指示(打開/關閉)」,「線段數(邊)」的列表。我創建了下面的腳本,但是我犯的一個錯誤是沒有停止條件。我感謝我的帖子的評論員。我想我解決了這個問題。下面我會試着用一個新腳本來回答我自己的問題。
recursive.d <- function(d){
t <- d[[1]]
a <- d[[2]]
k <- d[[3]]
a <- !a
t <- t + 1
k <- ifelse(a, k + 1, k)
d <- list(t, a, k)
d <- rbind(d[], recursive.d(d[]))
return (d)
}
d_ini <- list(0, TRUE, 2)
recursive.d(d_ini)
但事實上,輸出是Error: C stack usage 7970888 is too close to the limit
。我做錯了什麼?
1 )爲什麼你需要遞歸? 2)你的代碼中的停止條件是什麼/哪裏? 3)你能真正描述你想做什麼 - 你的代碼沒有任何意義。 – Dason
沒有基礎的情況。在命中任何可以返回的行之前,你需要命令'd < - rbind(d [],recursive.d(d []))'(涉及遞歸調用)。當然,你吹的堆棧。這是一個無限循環的遞歸等價物。 –
1)我需要遞歸,因爲我想在這種情況下使用它。這不是出於實際原因或獲得某些結果; 2)我沒有停止條件。我試圖用k == 5作爲停止,但函數只返回5; 3)這段代碼沒有意義,因爲它的形式非常抽象且帶有字母。我試圖產生一個列表,其中第一個成員計算時間(1,2,3,...),第二個成績在TRUE或FALSE之間,第三個成員計算一個取決於列表中其他兩個成員的數字。 – sbac