• might find this interesting...

    IF OBJECT_ID('dbo.fn_TestCollatzConjecture') > 0

    DROP FUNCTION dbo.fn_TestCollatzConjecture

    GO

    CREATE FUNCTION dbo.fn_TestCollatzConjecture ( @StartNumber BIGINT )

    RETURNS VARCHAR(200)

    AS

    BEGIN

    DECLARE @min-2 BIGINT

    DECLARE @Levels INT

    DECLARE @max-2 BIGINT

    DECLARE @Ret VARCHAR(200) ;

    WITH ApplyCollatzTransform

    AS ( SELECT @StartNumber AS NewNumber ,

    0 AS Level

    UNION ALL

    SELECT CASE WHEN NewNumber % 2 = 0

    THEN NewNumber / 2

    ELSE ( NewNumber * 3 ) + 1

    END ,

    Level + 1

    FROM ApplyCollatzTransform ACT

    WHERE NewNumber > 1

    )

    SELECT @min-2 = MIN(NewNumber) ,

    @Levels = MAX(Level) ,

    @max-2 = MAX(NewNumber)

    FROM ApplyCollatzTransform

    OPTION ( MAXRECURSION 0 )

    IF @min-2 = 1

    SET @Ret = 'Reached 1 after ' + CONVERT(VARCHAR(20), @Levels)

    + ' Level(s). Hit Max of ' + CONVERT(VARCHAR(20), @max-2)

    + ' before getting there...'

    ELSE

    SET @Ret = 'Did not hit 1 after ' + CONVERT(VARCHAR(20), @Levels)

    + ' Level(s)... Giving up...'

    RETURN @Ret

    END

    go

    DECLARE @StartNumber BIGINT

    SET @StartNumber = 27

    SELECT dbo.fn_TestCollatzConjecture(@StartNumber)