У меня есть тест-ДФ:Обнаружение бесконечный цикл в рекурсивной функции (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
Я хочу написать функцию, которая вводит номер строки и «следует» значение у до тех пор, пока не найдет строку для которого столбец 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. Каков самый простой способ обнаружить бесконечный цикл в этой ситуации? Я хочу отслеживать прошлые входы, поэтому я могу остановить функцию, если один и тот же ввод используется несколько раз, но я не знаю, как лучше всего отслеживать входные данные.