Computer Science 210
Data Structures
Fall 2019, Siena College
Powers BlueJ Project
Click here to download a BlueJ project for Powers.
Powers Source Code
The Java source code for Powers is below. Click on a file name to download it.
import java.util.Scanner;
/**
* Example Powers: examples of recursive methods to compute
* powers of a number.
*
* @author Jim Teresco, The College of Saint Rose, CSC 252, Fall 2013
* Updated for CSIS 210, Siena College, Fall 2016, Fall 2018
* @version Fall 2019
*
*/
public class Powers {
/**
main method to test our methods that compute powers.
@param args not used.
*/
public static void main(String args[]) {
// read in the base and exponent from a Scanner
Scanner s = new Scanner(System.in);
System.out.println("Let's compute the value of some integer raised to a power.");
System.out.print("First, enter the base: ");
int base = s.nextInt();
int exponent = 0;
do {
System.out.print("Next, enter the exponent (>=0): ");
exponent = s.nextInt();
if (exponent < 0) {
System.out.println("Negative exponents are not allowed");
}
} while (exponent < 0);
// now we compute in three different ways, using the methods below.
System.out.println("" + base + "^" + exponent + ", computed three ways:");
System.out.println("Method using a loop: " + loopPower(base, exponent));
System.out.println("Method using straightforward recursion: " + recPower(base, exponent));
System.out.println("Method using smarter recursion: " + fastRecPower(base, exponent));
}
/**
Compute the power a^n using a good old fashioned loop.
@param a the base for the power computation
@param n the exponent for the power computation
@return a^n
*/
public static int loopPower(int a, int n) {
int answer = 1;
for (int i = 0; i < n; i++) {
answer *= a;
}
return answer;
}
/**
Compute the power a^n using a straightforward recursive approach
@param a the base for the power computation
@param n the exponent for the power computation
@return a^n
*/
public static int recPower(int a, int n) {
// our base case is n == 0
if (n == 0) {
return 1;
}
// otherwise, we have to do some work, a^n = a * a^{n-1}
return a * recPower(a, n -1);
}
/**
Compute the power a^n using a a more efficient recursive
approach, based on the idea that we can compute a power a^{2n}
as (a*a)^n
@param a the base for the power computation
@param n the exponent for the power computation
@return a^n
*/
public static int fastRecPower(int a, int n) {
// base case is again n == 0
if (n == 0) {
return 1;
}
// now, see if n is even or odd
if (n % 2 == 1) {
// it's odd, so use straightforward recursion to get
// down to an even case
return a * fastRecPower(a, n - 1);
}
// if we got here, it's even, so we can do better
return fastRecPower(a * a, n / 2);
}
}