Integer Division Loops
Haskell, 227 203 bytes
17 bytes saved thanks to Οurous
(%)=div
u x|odd x=x%2+1|1>0=x%2
[0,b]!l=[b]!l
[b,0]!l=[b]!l
t!l|elem t l=[dropWhile(/=t)l]
t@[a,b]!l|q<-l++[t]=[a%2,u a+b]!q++[u b+a,b%2]!q
f x|q<-[x%2,u x]![[x]]=[a|(a,b)<-zip q[0..],notElem a$take b q]
Try it online!
Clean, 267 ... 167 bytes
import StdEnv
f s l|any((==)s)l=[dropWhile((<>)s)l]#[h,t:_]=s
|1>h*t=f[max h t]l=f[h/2,(h+1)/2+t](l++[s])++(f[(t+1)/2+h,t/2](l++[s]))
@n=removeDup(f[n/2,(n+1)/2][[n]])
Try it online!
Ungolfed:
loops num
= removeDup (half (divide num) [[num]])
where
divide num
= [num/2, (num+1)/2]
half [_, 0] list
= list
half [0, _] list
= list
half [a, b] list
| isMember [a, b] list
= [dropWhile ((<>) [a, b]) list]
# [u, v: _]
= divide a
# [x, y: _]
= divide b
= (half [u, v+b] (list ++ [a, b])) ++ (half [a+y, x] (list ++ [a, b]))