#include #include double factorial( int ); double factorial_r( int ); double fibonacci( int ); double fibonacci_r( int ); int main() { std::cout.precision( 17 ); for ( int i = 0; i <= 100; i += 1 ) { std::cout << "Explicit: " << i << "! = " << factorial( i ) << std::endl; std::cout << "Recursive: " << i << "! = " << factorial_r( i ) << std::endl; std::cout << "Explicit: F(" << i << ") = " << fibonacci( i ) << std::endl; std::cout << "Recursive: F(" << i << ") = " << fibonacci_r( i ) << std::endl; } return 0; } double factorial( int n ) { double result = 1; for ( double i = 2; i <= n; ++i ) { result *= i; } return result; } double factorial_r( int n ) { if ( n <= 1 ) { return 1; } else { return n*factorial_r( n - 1 ); } } double fibonacci( int n ) { double phi = (std::sqrt(5.0) + 1.0)/2.0; double result = ( std::pow( phi, n ) - std::pow( 1.0 - phi, n ) )/std::sqrt( 5.0 ); std::floor( result + 0.5 ); } double fibonacci_r( int n ) { if ( n <= 2 ) { return 1; } else { return fibonacci_r( n - 1 ) + fibonacci_r( n - 2 ); } }