我正在学习关于算法的课程,我只是想知道其中一个函数是否可以用更简单的方式编写:
private int root ( int i)
{
while( i != id[i])
{
id[i] = id[id[i]];
i = id[i];
}
return i;
}
一个非常简短的介绍是id[]
表示一组元素是树。所有元素都有一个指向根的数值。此函数尝试查找根。
有效。但是有没有需要while
循环?该函数似乎不是递归的,也不以任何方式递增i
,因此可以用if
代替吗?
我知道我在这里遗漏了一些东西,但我找不到什么。
答案 0 :(得分:4)
在此示例中,它正在尝试查找路径。循环不会递增变量,而是在每次迭代时将i =
设置为路径id[i]
中的下一个元素
想象一下这个数组看起来像
int[] id = { 1, 2, 3, 4, 4 };
int i = 0;
在第一个iteraton上,
i = 0;
i = id[0] == 1;
i = id[1] == 2;
i = id[2] == 3;
i = id[3] == 4;
4 == id[4] so it stops.
使用除递增之外的其他东西的循环是相当常见的,最明显的例子是使用Iterator,但另一个常见的例子是遍历List的节点。