如何在 R 中獲取此函式的輸出?
nodes2 <- c(1,2,4,5,10,11,20,21)
getLeftOrder <- function(root, snodes, nodes) {
if ( length(nodes) == 0 ) {
return(snodes)
} else {
nodes <- nodes[-(which(nodes == (2*root)))]
getLeftOrder(2*root, snodes, nodes)
snodes <- c(snodes, root)
cat(root, fill = TRUE)
nodes <- nodes[-(which(nodes == (2*root 1)))]
getLeftOrder(2*root 1, snodes, nodes)
}
}
tnodes <- getLeftOrder(1, vector('integer'), nodes2)
順序遍歷/重新排序輸出cat()很好,但輸出tnodes不是。我想避免使用<<-運算子。
uj5u.com熱心網友回復:
該函式需要[至少有時]回傳一些有趣的東西,并在遞回呼叫回傳時收集結果。試圖保持當前邏輯相同,您需要來自第一組遞回呼叫的根、當前根和來自第二組遞回呼叫的根。添加一些message()呼叫,以便我們可以看到發生了什么:
nodes2 <- c(1,2,4,5,10,11,20,21)
getLeftOrder <- function(root, nodes) {
message('root: ', root, ' nodes: ', paste(nodes, collapse = ' '))
if ( length(nodes) == 0 ) {
return(NULL)
} else {
nodes <- nodes[-which(nodes == 2*root)]
r1 <- getLeftOrder(2*root, nodes)
message(root)
nodes <- nodes[-which(nodes == 2*root 1)]
r2 <- getLeftOrder(2*root 1, nodes)
return(c(r1, root, r2))
}
}
它像這樣運行:
tnodes <- getLeftOrder(1, nodes2)
#> root: 1 nodes: 1 2 4 5 10 11 20 21
#> root: 2 nodes: 1 4 5 10 11 20 21
#> root: 4 nodes: 1 5 10 11 20 21
#> root: 8 nodes:
#> 4
#> root: 9 nodes:
#> 2
#> root: 5 nodes: 1 10 11 20 21
#> root: 10 nodes: 1 11 20 21
#> root: 20 nodes: 1 11 21
#> root: 40 nodes:
#> 20
#> root: 41 nodes:
#> 10
#> root: 21 nodes: 1 11
#> root: 42 nodes:
#> 21
#> root: 43 nodes:
#> 5
#> root: 11 nodes: 1 20 21
#> root: 22 nodes:
#> 11
#> root: 23 nodes:
#> 1
#> root: 3 nodes:
tnodes
#> [1] 4 2 20 10 21 5 11 1
I still don't quite understand the logic here, though; there's quite likely a simpler way to do this.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/455062.html
