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)