Collatz Conjecture

From Director Online Wiki
Jump to: navigation, search
--/******
--* COLLATZ CONJECTURE (SYRACUSE PROBLEM)
--****
--* @Param  : 'x'      <Integer> or <Float>
--* @Return : 't_list' <LinearList>
--* @Note   : hidden param 't_list'
--***/
on mCollatz( x )
  --
  if Not(ilk(x, #Number)) then return( Void )
  --
  if ListP(_movie.param(_movie.paramCount()) then
    t_list = _movie.param(_movie.paramCount())
  else
    t_list = []
  end if
  --
  t_list.add(float(x))
  --
  if (x - float(1) <= float(0)) then -- or EPSILON   
    return( t_list )
  end if
  --
  if (x mod 2) then    
    return( mCollatz(x * float(3) + float(1), t_list) )
  else
    return( mCollatz(x * 0.5, t_list) )
  end if
end
--*/