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.)