function ask_name()
{
    var name = prompt("What is your name?", "anonymous")
    
    if (name == null)
    {
	return "(null)"
    }
    else
    {
	return name
    }
}

// fib: int -> int
// Returns the nth Fibonacci number.
// fib(0) = 0,  fib(1) = 1,  fib(2) = 1,  fib(3) = 2
// Returns -1 for negative numbers
function fib (n)
{
    if (n<0)
    {
	return -1
    }
    else if (n==0)
    {
	return 0
    }
    else if (n==1)
    {
	return 1
    }
    else
    {
	return fib2(0, 1, n-2)
    }
}

// fib2: int, int, int -> int
// Tail recursive worker function for fib(n).
function fib2(a, b, r)
{
    if (r<1)
    {
	return a + b
    }
    else
    {
	return fib2(b, a + b, r-1)
    }
}

// fibs: int -> [int]
// returns array of n fibonacci numbers
function fibs (n)
{
    var nums = new Array()
    
    if (n < 1)
    {
	return nums
    }
    
    nums[0] = 0

    if (n == 1)
    {
	return nums
    }
    
    nums[1] = 1
    
    for (i=2; i<n; i++)
    {
	nums[i] = nums[i-1] + nums[i-2]
    }
    
    return nums
}

// sfibs: int -> string
// returns string containing n fibonacci numbers
function sfibs(n)
{
    var array = fibs(n)
    return array.join(", ")
}

// stack_test: n -> string
// recurses n times and returns "."
// Result of test: Firefox 1.5.0.11 limits recursion to 999 levels
function stack_test (n)
{
    if (n < 1)
    {
	return "."
    }
    else
    {
	return stack_test(n-1)
    }
}

