heute frag ich mal. Findet jemand den Fehler, warum
with recursive collatz(n,c) as (
select 1 as n, 3 as c
union all
select n+1, case when ((c%2) = 0) then (c)/2 else (c*3+1)/2 end from collatz where c > 1)
select * from collatz limit 20;
Dein Union lässt doch in jedem “Durchlauf” die Anfangszahl eins hochzählen.
Daher hast du in jedem Durchlauf eine andere Betrachtung, nur nicht die zur Zahl, die du suchst.
Als Ergebnis hast du auch nur 6 Zeilen, nicht 20 wie gewünscht.
with recursive collatz(n,c) as (
select 1 as n, 7 as c
union all
select n+1, case when ((c%2) = 0) then (c)/2 else (c*3+1) end from collatz where c > 1)
select * from collatz limit 20;