如果函数不是递归的话可以替换吗?

时间:2014-07-06 17:16:01

标签: java algorithm loops

我正在学习关于算法的课程,我只是想知道其中一个函数是否可以用更简单的方式编写:

private int root ( int i)
{
  while( i != id[i])
    {
      id[i] = id[id[i]];
      i = id[i];
    }
   return i;
}

一个非常简短的介绍是id[]表示一组元素是树。所有元素都有一个指向根的数值。此函数尝试查找根。

有效。但是有没有需要while循环?该函数似乎不是递归的,也不以任何方式递增i,因此可以用if代替吗?

我知道我在这里遗漏了一些东西,但我找不到什么。

1 个答案:

答案 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的节点。