C++ homework help(solved thx)...

Page 2 - Seeking answers? Join the AnandTech community: where nearly half-a-million members share solutions and discuss the latest tech.

dinkumthinkum

Senior member
Jul 3, 2008
203
0
0
A recursive function written like that (with the recursive call executed last) is called "tail-recursion" and is tantamount to iteration. A Sufficiently Smart Compiler (tm) will recognize that situation and transform the recursive call into a loop without any function call overhead. gcc knows how to do this in many situations, though I don't know whether VS2008 can (it is Microsoft, so I have my doubts). It's actually quite a common and simple compiler optimization, and is absolutely necessary for functional language compilers.

It is extremely naive to say that "recursion" is always less efficient. Especially if you go so far as to build your own stack in your attempt to "avoid recursion". That is a classic newbie mistake.
 

Cogman

Lifer
Sep 19, 2000
10,283
134
106
A recursive function written like that (with the recursive call executed last) is called "tail-recursion" and is tantamount to iteration. A Sufficiently Smart Compiler (tm) will recognize that situation and transform the recursive call into a loop without any function call overhead. gcc knows how to do this in many situations, though I don't know whether VS2008 can (it is Microsoft, so I have my doubts). It's actually quite a common and simple compiler optimization, and is absolutely necessary for functional language compilers.

It is extremely naive to say that "recursion" is always less efficient. Especially if you go so far as to build your own stack in your attempt to "avoid recursion". That is a classic newbie mistake.

Putting compiler optimizations aside. So long as the "call" function is used, recursion will be less efficient then its equivalent iterative solution. The stack unwinding is what really kills things. Even doing a stack/queue based iterative solution has the possibility of being faster then its recursive counter part as the return address isn't placed on the stack (thus you go until the stack is empty). Though, that depends a lot on implementation of the stack and of course, compiler optimizations.
 

dinkumthinkum

Senior member
Jul 3, 2008
203
0
0
Again, the point is that "tail-recursion" is tantamount to iteration and any decent compiler (e.g. gcc) will recognize that and not emit a "call" instruction.
 

eLiu

Diamond Member
Jun 4, 2001
6,407
1
0
Again, the point is that "tail-recursion" is tantamount to iteration and any decent compiler (e.g. gcc) will recognize that and not emit a "call" instruction.

"pure" tail recursion in a form that a 'decent compiler' is willing to recognize is generally pretty damn simple (well, at least in C). I would not count on the compiler to unwind tail recursion for me unless I'm doing something that isn't much more complex than the dumb way of computing factorials.

I mean, if you're writing a (simple) for/while loop with recursion in a non-functional language, you're doing something wrong. (Exception: amt of computation is large & depth of recursion is small)
 
sale-70-410-exam    | Exam-200-125-pdf    | we-sale-70-410-exam    | hot-sale-70-410-exam    | Latest-exam-700-603-Dumps    | Dumps-98-363-exams-date    | Certs-200-125-date    | Dumps-300-075-exams-date    | hot-sale-book-C8010-726-book    | Hot-Sale-200-310-Exam    | Exam-Description-200-310-dumps?    | hot-sale-book-200-125-book    | Latest-Updated-300-209-Exam    | Dumps-210-260-exams-date    | Download-200-125-Exam-PDF    | Exam-Description-300-101-dumps    | Certs-300-101-date    | Hot-Sale-300-075-Exam    | Latest-exam-200-125-Dumps    | Exam-Description-200-125-dumps    | Latest-Updated-300-075-Exam    | hot-sale-book-210-260-book    | Dumps-200-901-exams-date    | Certs-200-901-date    | Latest-exam-1Z0-062-Dumps    | Hot-Sale-1Z0-062-Exam    | Certs-CSSLP-date    | 100%-Pass-70-383-Exams    | Latest-JN0-360-real-exam-questions    | 100%-Pass-4A0-100-Real-Exam-Questions    | Dumps-300-135-exams-date    | Passed-200-105-Tech-Exams    | Latest-Updated-200-310-Exam    | Download-300-070-Exam-PDF    | Hot-Sale-JN0-360-Exam    | 100%-Pass-JN0-360-Exams    | 100%-Pass-JN0-360-Real-Exam-Questions    | Dumps-JN0-360-exams-date    | Exam-Description-1Z0-876-dumps    | Latest-exam-1Z0-876-Dumps    | Dumps-HPE0-Y53-exams-date    | 2017-Latest-HPE0-Y53-Exam    | 100%-Pass-HPE0-Y53-Real-Exam-Questions    | Pass-4A0-100-Exam    | Latest-4A0-100-Questions    | Dumps-98-365-exams-date    | 2017-Latest-98-365-Exam    | 100%-Pass-VCS-254-Exams    | 2017-Latest-VCS-273-Exam    | Dumps-200-355-exams-date    | 2017-Latest-300-320-Exam    | Pass-300-101-Exam    | 100%-Pass-300-115-Exams    |
http://www.portvapes.co.uk/    | http://www.portvapes.co.uk/    |