我知道递归意味着一个函数调用自己。 iteartion意味着有一个循环(同时,做..) 问题我想知道我的程序在循环中有Recursion时如何运行: **这个例子将生成给定strin的所有排列:
angular.element(el).parent().parent();
我想跟踪我的节目。任何人都可以解释它是如何运行的吗?
答案 0 :(得分:0)
递归链深入size
次调用加一个空字符串。每个递归步骤调用string_permutation()
size
次,将字符串参数orig
缩小一个符号(size - 1
)。因此,对size!
的{{1}}调用总数可以生成所有可能的排列。
可以描述为图表:
string_permutation()
尾部调用优化不能应用于这种类型的递归。
因此,您应该期望它在本地string_permutation: // top call for entire size N
// start loop for smaller strings size = N - 1
string_permutation:
// start loop for smaller strings size = N - 2
string_permutation: // loop step 0, size = N - 2
// start loop for smaller strings size = N - 3
string_permutation:
//...
string_permutation: // loop step 1, size = N - 2
string_permutation: // loop step 2, size = N - 2
//...
string_permutation:
//...
和size
的{{1}}个实例的堆栈链上创建。