如何实现信仰的飞跃"什么时候使用递归?

时间:2015-12-23 00:41:24

标签: recursion

在制作递归方法时对我来说。我总是需要花很多时间来做这件事,因为我会做一些测试用例并查看我的递归案例是否有效以及绘制堆栈图。但是,当我向其他人询问时,他们只是说我需要相信自己它会起作用。如果你不知道递归案件中发生了什么,我怎么能相信呢?

1 个答案:

答案 0 :(得分:3)

定义在递归情况下发生的事情,就像您定义方法的其余部分一样。想象一下,别人写了一个方法来做你正在写的那个;你不会有问题,不是吗?唯一的区别是是该方法的作者,它恰好是正在编写的那个。

例如:我正在编写以下方法:

// Sort array a[i..j-1] in ascending order
method sort_array( a, i, j ) {
  ..
}

基本案例很简单:

  if ( i >= j-1 ) // there is at most one element to be sorted
    return;       // a[i..j-1] is already sorted

现在,当不是时,我可以执行以下操作:

  else {
    k = index_of_max( a, i, j );
    swap( a, j-1, k );

此时,我知道a[j-1]具有正确的值,所以我只需要对它前面的内容进行排序 - 幸运的是,我有一种方法可以做到这一点:

    sort_array( a, i, j-1 );
  }

不需要信仰的飞跃;我知道递归调用会起作用,因为我编写的方法就是这样做的。