There are four types of common coins in   US   currency:

   quarters   (25 cents)
   dimes   (10 cents)
   nickels   (5 cents),   and 
   pennies   (1 cent) 


There are six ways to make change for 15 cents:

   A dime and a nickel 
   A dime and 5 pennies
   3 nickels
   2 nickels and 5 pennies
   A nickel and 10 pennies
   15 pennies


Task

How many ways are there to make change for a dollar using these common coins?     (1 dollar = 100 cents).



Optional

Less common are dollar coins (100 cents);   and very rare are half dollars (50 cents).   With the addition of these two coins, how many ways are there to make change for $1000?

(Note:   the answer is larger than   232).



References

 an algorithm from the book Structure and Interpretation of Computer Programs.
 an article in the algorithmist.
 Change-making problem on Wikipedia.


fn main() {
    amount := 100
    println("amount, ways to make change: $amount ${count_change(amount)}"))
}
 
fn count_change(amount int) i64 {
    return cc(amount, 4)
}
 
fn cc(amount int, kinds_of_coins int) i64 {
    if amount == 0 {
        return 1
    } else if amount < 0 || kinds_of_coins == 0 {
        return 0
    }
    return cc(amount, kinds_of_coins-1) +
        cc(amount - first_denomination(kinds_of_coins), kinds_of_coins)
}
 
fn first_denomination(kinds_of_coins int) int {
    match kinds_of_coins {
		1 {
			return 1
		}
		2 {
			return 5
		}
		3 {
			return 10
		}
		4 {
			return 25
		}
	}
}