琐碎的例子
check:
# Grab some data held in a file
while ((ReadFile ()) != 0 ) {
if ((checkSomething ()) != 1) {
# value found, check file again
next check;
} else {
blah ($doo, $foo);
}
}
Run Code Online (Sandbox Code Playgroud)
在内存消耗方面,以下内容有何影响 - 据我所知,在审核其他问题后,这不是递归:
sub D {
..
}
sub C {
D ();
}
sub B {
C ();
}
sub A {
while (true) {
B ();
}
}
Run Code Online (Sandbox Code Playgroud)你的第二个例子也不是递归的例子.这只是我非正式地称之为"链式子程序调用"的一个例子 - 我不相信它有一个正式的术语.递归要求子程序直接或通过一组中介调用自身.
例如,如果子程序D在某些条件下对A,B或C进行了调用,那将是递归.
至于深度调用堆栈,答案取决于:
每次调用子例程时,它都会在调用堆栈上添加一个新帧.该子帧一直保持到子程序完成为止.此堆栈帧的大小主要取决于参数列表的长度,加上一些固定的开销.
所以在这种情况下,你有一个包含四个元素的堆栈框架.
如果你的调用链变得太深并且每个条目都有很长的参数列表,那么你最终会用尽调用堆栈的空间.这称为堆栈溢出.:)