在課堂上,我正在帶我的老師讓學生不願意遞歸地調用函數。例如,如果我要打電話的主要功能在下面的代碼:遞歸調用函數爲什麼不好?
if (x > 5) {
printf("Your number's too high. Enter a number below 5.");
main();
}
我,而不是鼓勵使用:
int x;
while (x > 5) {
printf("\nYour number's too high. Enter a number below 5.");
scanf("%d", &x);
}
雖然我明白,當函數是一個更簡單的方法關於這個特定的問題,我們被告知要完全避免遞歸,尤其是使用main()。不過,我認爲這是一個相當重要的編程概念。爲什麼要避免這種事情,尤其是在調用main()時?
'主()'一般有它的一些設置代碼和初始化,所以它通常是一個壞主意,在這種情況下遞歸。只有在真正有意義時才使用遞歸 - 某種分而治之的算法 - 而不是循環的替代。 – javanut13
有時堆棧溢出問題......調用一個函數遞歸地爲內存「有時」增加了很多負擔。它通常不會泄氣。 – beebee
遞歸調用函數並不壞。它*不好從一個函數調用「main()」!如果一個簡單的循環會更好地工作,那麼使用遞歸(這涉及一些開銷)也是不好的。這裏有一個有用的線程:http://cboard.cprogramming.com/c-programming/8216-when-use-recursion.html – paulsm4