我有一個測試DF:在一個遞歸函數檢測無限循環(R)
testdf<-data.frame(x = seq(1,10), y= c(1, 1, 4, 3, 2, 6, 7, 4, 9, 10))
testdf
x y
1 1 1
2 2 1
3 3 4
4 4 3
5 5 2
6 6 6
7 7 7
8 8 4
9 9 9
10 10 10
我想要寫,其輸入行號和「跟隨」的函數的y值,直到它找到一個行對於哪個列x =列y。
get_acc_x<-function(rownum){
if(testdf[rownum, 'x'] == testdf[rownum, 'y']){
return(rownum)
}else{
get_acc_x(testdf[rownum, 'y'])
}
}
所以,運行get_acc_x(1)返回1,get_acc_x(9)返回圖9,get_acc_x(2)返回1,get_acc_x(5)也將返回1等
但是,如果我要在數字8上運行此函數,它將進入無限循環,在3和4之間來回切換。在這種情況下檢測無限循環的最簡單方法是什麼?我想跟蹤過去的輸入,所以如果多次使用相同的輸入,我可以停止該功能,但我不知道如何最好地跟蹤輸入。