在课堂上,我带着老师不鼓励学生递归地调用函数。例如,如果我想在以下代码中调用main函数:
\begin{equation}
\centering
X_{i}=
$$\begin{bmatrix}
C_1\\
C_2\\
C_3\\
\vdots\\
\vdots\\
\vdots\\
\vdots\\
C_n\\
OlValue\\
\end{bmatrix}$$
\label{Vect}
\end{equation}
我鼓励使用:
if (x > 5) {
printf("Your number's too high. Enter a number below 5.");
main();
}
虽然我理解while函数是解决这个特定问题的一种更简单的方法,但我们被告知要完全避免递归,尤其是使用main()。但是,我认为这是编程中使用的一个相当重要的概念。为什么要避免这种事情,特别是在调用main()?
时答案 0 :(得分:4)
很棒的问题。
使用递归可以更容易地解决一些类型的问题,但通常只要有可能,迭代通常会更有效。
简而言之,这就是每次我们进入一个新函数时,我们必须保存我们离开的位置以及那里的所有变量,这样当内部函数终止时我们可以在父母身上恢复。
最终你必须记住每个父函数的数据,这将是很多,所以你会耗尽你的记忆。此外,保存数据和创建新上下文以执行新功能的过程需要花费少量时间,这会在您进行数十万次呼叫时增加。
通过阅读计算机体系结构和汇编语言,您可以了解编译器所做的一些很酷的事情,以使我们认为理所当然的事情(函数,循环)。
例如,查看加州大学伯克利分校关于该主题的课程资料:http://www-inst.eecs.berkeley.edu/~cs61c/fa15/