Proportion of self-avoiding walks on a square lattice
Haskell, 153 149 144 140 126 118 92 bytes
Here we represent the 2d coordinates as a single integer: We start at 0, and the directions N,E,S,W correspond to adding +n,+1,-n,-1 where n is the input (we could also use any larger number). Using this we generate all possible paths, and then just check for duplicate numbers in those paths.
Thanks @H.PWiz for -26 bytes!

g n|a&lt;-scanl(+)0&lt;$&gt;mapM(\_-&gt;[1,-1,n,-n])[1..n]=sum[1|x&lt;-a,[b|b&lt;-x,c&lt;-x,b==c]==x]/sum[1|x&lt;-a]

Try it online!
Explanation
--generate all possible paths
    a&lt;-scanl(+)0&lt;$&gt;mapM(\_-&gt;[1,-1,n,-n])[1..n]
--count the non-self intersecting paths, compute the ratio to the total
g n|a&lt;- ... =sum[1|x&lt;-a,[b|b&lt;-x,c&lt;-x,b==c]==x]/sum[1|x&lt;-a]