title: Tail Recursion
signature: tail_recursion <- function(n) {
test_code: 
  
  
  # SOLUTION CODE
  # ============================================
  PLACEHOLDER_CODE_BODY
  
  # TESTING CODE 
  # ============================================
  validate_solution <- function(actual, expected) {
      toString(actual)==toString(expected)
  }
  
  driver <- function(n, expected){
      if (validate_solution(PLACEHOLDER_FN_NAME(n), expected)){
          "PASSED"
      } else{
          "FAILED"
      }
  }
  
  main <- function() {
      cat(sprintf("TEST-0...%s\n",driver(
          16L, 
          20922789888000L
      )))
  
  }
  
  main()
source_py: def tail_recursion(n):
      if (n == 0):
          return 1
      return (n * tail_recursion((n - 1)))
source_cpp: unsigned int tail_recursion(unsigned int n) {
    if ( n == 0 ) return 1;
    return n * tail_recursion ( n - 1 );
  }