The calculation of perfect numbers is a perfect example of when you shouldn't use recursion. The source code is as follows:

#include <iostream.h>
int perfection(const int &original, int divisor, int i)
{

divisor--;
if(divisor > 0) //call perfection() till the divisor is zero
i=perfection(original,divisor,i);

if(divisor>0)
if(original%divisor==0) //check to see if the divisor goes into the original evenly
i+=divisor; //pretty obvious
return(i); //spill back
}

void main(){
int original, divisor, i,b = 0;
original = 1;
do{ //this loop calls perfection for every number from 1 to 8128

original++;
divisor = original;

i = perfection(original, divisor, b);

if(i==original)
cout<< i <<endl;

}while(original < 8129);
}

(Yes, I threw code optimization to the wind.)

Log in or register to write something here or to contact authors.