为什么递归调用函数不好?

时间:2015-11-04 00:54:00

标签: c function recursion

在课堂上,我带着老师不鼓励学生递归地调用函数。例如,如果我想在以下代码中调用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()?

1 个答案:

答案 0 :(得分:4)

很棒的问题。

使用递归可以更容易地解决一些类型的问题,但通常只要有可能,迭代通常会更有效。

简而言之,这就是每次我们进入一个新函数时,我们必须保存我们离开的位置以及那里的所有变量,这样当内部函数终止时我们可以在父母身上恢复。

最终你必须记住每个父函数的数据,这将是很多,所以你会耗尽你的记忆。此外,保存数据和创建新上下文以执行新功能的过程需要花费少量时间,这会在您进行数十万次呼叫时增加。

通过阅读计算机体系结构和汇编语言,您可以了解编译器所做的一些很酷的事情,以使我们认为理所当然的事情(函数,循环)。

例如,查看加州大学伯克利分校关于该主题的课程资料:http://www-inst.eecs.berkeley.edu/~cs61c/fa15/