import java.awt.*;
import java.awt.event.*;
public class RecursionVsIteration extends Frame
{
-
public RecursionVsIteration()
{
this.addWindowListener (new WindowAdapter(){
public void windowClosing(WindowEvent e){
dispose();
System.exit(0);}
});
}
public static void main(String args[])
{
System.out.println("Starting App: Four examples of recursion, iteration, and explicit formulae. N = 100 for examples 1-3, N = 12 for Fibonacci.");
RecursionVsIteration f = new RecursionVsIteration();
f.setSize(100,100);
f.show();
//Recursive solution to 1)
System.out.println("Recursively: 1+2+3+...+100 = "+sumN(100));
//Iterative solution to 1)
int n = 0, N = 100;
for(int i = 1; i <= N; i++)
n += i;
System.out.print("Iteratively: 1+2+3+...+100 = "+n);
//Explicit solution to 1)
System.out.println("\nExplicit formula, N*(N+1)/2: 1+2+3+...+100 = "+N*(N+1)/2);
//Recursive solution to 2)
System.out.println("\n\nRecursively: 1+3+...+(2*100-1) = "+sumOddN(2*100-1));
//Iterative solution to 2)
n = 0;
int oddN = 2*N-1;
for(int i = 1; i <= N; i++)
n += 2*i-1;
System.out.print("Iteratively: 1+3+...+199 = "+n);
//Explicit solution to 2)
System.out.println("\nExplicit formula, N*N: 1+3+...+(2*100-1) = "+N*N);
//Recursive solution to 3)
//The 20! is near the limit of a long, 100! is outside the limit of a float, ~2E128.
//The exponent on a double is 11-bits excess 1023, so we use the double data type.
System.out.println("\n\nRecursively, n! = n*(n-1)!: 1*2*3*...*100 = "+factorial(N));
//Iterative solution to 3)
double nD = 1;
for(int i = 1; i <= N; i++)
nD *= i;
System.out.print("Iteratively: 1*2*3*...*100 = "+nD);
//Explicit solution to 3)
System.out.println("\nExplicit formula, N! = None");
//Recursive solution to 4)
System.out.println("\n\nRecursively, fibo(n) = fibo(n-1) + fibo(n-2): 1,1,2,3,5,8,...,(a(n-1)+a(n-2)). fibo(12) = "+fibo(12));
//Iterative solution to 4)
double fibo3 = 0, fibo2 = 1, fibo1 = 1;
for(int j = 3; j <= 12; j++)
{
fibo3 = fibo2 + fibo1;
fibo1 = fibo2;
fibo2 = fibo3;
}
System.out.print("Iteratively, fibo(n): 1,1,2,3,5,8,...,(a(n-1)+a(n-2)). fibo(12) = "+fibo3);
//Explicit solution to 4)
System.out.println("\nExplicit formula, fibo(n) = ...to be determined");
//Recursive solution to the sum of the first N fibonacci terms)
System.out.println("\n\nRecursively, sum(fibo(n)) = sum(fibo(n-1) + fibo(n-2)): 1+1+2+3+5+8+...+(a(n-1)+a(n-2)). sum(fibo(12)) = "+fiboSum(12));
}//main()
public static int sumN(int n)
{
if(n==1)
return 1;
else
return n + sumN(n-1);
}//sumN()
public static int sumOddN(int n)
{
if(n<=0)//error trap for the inadvertant even argument
return -1;
if(n==1)
return 1;
else
return n + sumOddN(n-2);
}//sumOddN()
public static double factorial(double n)
{
if(n==1)
return 1;
else
return n * factorial(n-1);
}//factorial()
public static double fibo(double n)
{
if(n==2 || n==1)
return 1;
else
return fibo(n-1) + fibo(n-2);
}//fibo()
public static double fiboSum(int n)
{
double fiboSumN = 0;
for(int i = 1; i <= n; i++)
fiboSumN += fibo(i);
return fiboSumN;
}//fiboSum()
}//RecursionVsIteration
/*
Starting App: Four examples of recursion, iteration, and explicit formulae.
N = 100 for examples 1-3, N = 12 for Fibonacci.
Recursively: 1+2+3+...+100 = 5050
Iteratively: 1+2+3+...+100 = 5050
Explicit formula, N*(N+1)/2: 1+2+3+...+100 = 5050
Recursively: 1+3+...+(2*100-1) = 10000
Iteratively: 1+3+...+199 = 10000
Explicit formula, N*N: 1+3+...+(2*100-1) = 10000
Recursively, n! = n*(n-1)!: 1*2*3*...*100 = 9.33262154439441E157
Iteratively: 1*2*3*...*100 = 9.33262154439441E157
Explicit formula, N! = None
Recursively, fibo(n) = fibo(n-1) + fibo(n-2): 1,1,2,3,5,8,...,(a(n-1)+a(n-2)). fibo(12)
= 144.0
Iteratively, fibo(n): 1,1,2,3,5,8,...,(a(n-1)+a(n-2)). fibo(12) = 144.0
Explicit formula, fibo(n) = ...to be determined
Recursively, sum(fibo(n)) = sum(fibo(n-1) + fibo(n-2)): 1+1+2+3+5+8+...+(a(n-1)+a(n-2)). sum(fibo(12))
= 376.0
Exit code: 0
No Errors
*/