Here is the proof that square can be partitioned into $n$ non-congruent similar rectangles for any $n\ge 3$.
Consider this modification of the @florian-lehner's construction.
- fix $A > 1$, we will choose it later
- start with a $1\times 1$ square and $A \times A$ square lined up so that their upper borders are on the same height
- alternate in attaching the square of appropriate size above and on the right of the drawing until you have $n-1$ squares in total
It should now look like this (here $n=5$):
From here on there is a slight difference between odd and even case.
For odd $n$ you get the rectangle of the size $(F_{n-2} A + F_{n-3}) \times (F_{n-1} A + F_{n-2})$ with a missing rectangular corner in the lower-left, of the size $(A-1) \times 1$. Here $F_n$ denote Fibonacci numbers.
Rescale horizontally by factor $\frac{F_{n-2} A + F_{n-3}}{F_{n-1} A + F_{n-2}}$ so that the big figure is a square, and now we need to find such $A$ that the missing corner rectangle is similar to all the present ones (but has different orientation).
This gives us
$$ \frac{F_{n-2} A + F_{n-3}}{F_{n-1} A + F_{n-2}} : (A-1) = 1 : \frac{F_{n-2} A + F_{n-3}}{F_{n-1} A + F_{n-2}}$$
or the following cubic equation:
$$f(A):=(A-1)(F_{n-1} A + F_{n-2})^2 - (F_{n-2} A + F_{n-3})^2 = 0$$
It is easy to see that $f(1)<0$ and $f(A)\rightarrow +\infty$ as $A$ grows. Thus by Intermediate value theorem the equation has a solution greater than $1$.
For even $n$ big rectangle is of the size $(F_{n-1} A + F_{n-2}) \times (F_{n-2} A + F_{n-3})$, but the argument is essentially the same.
Also here is Sage code that generates such partitions for any $n\ge 3$:
n=3
move = lambda P,v: map(lambda x: (x[0]+v[0],x[1]+v[1]), P) #transport by vector
times = lambda P,c: map(lambda x: (c*x[0],c*x[1]), P) #homothety
A=var('A')
if not n%2:
A=solve((A-1)*(fibonacci(n-2)*A + fibonacci(n-3))^2 - (fibonacci(n-1)*A + fibonacci(n-2))^2 == 0, A, solution_dict=True)[2][A] #real solution of the equation in the even case
W=(fibonacci(n-1)*A + fibonacci(n-2))/(fibonacci(n-2)*A + fibonacci(n-3)) #scaling factor in the even case
else:
A=solve((A-1)*(fibonacci(n-1)*A + fibonacci(n-2))^2 - (fibonacci(n-2)*A + fibonacci(n-3))^2 == 0, A, solution_dict=True)[2][A] #real solution of the equation in the odd case
W=(fibonacci(n-2)*A + fibonacci(n-3))/(fibonacci(n-1)*A + fibonacci(n-2)) #scaling factor in the odd case
H=A-1 #height of the "missing" corner
#now to just plot all the rectangles
horizontal=[(0,0),(W,0),(W,1),(0,1)]
vertical=[(0,0),(W,0),(W,H),(0,H)]
sumplot=polygon(vertical,fill=False)
v=A-1
c=1
for i in range(n//2):
sumplot+=polygon(move(times(horizontal,c),(0,v)),fill=False)
v=v+c
c=v+c
v=1
c=A
for i in range((n-1)//2):
sumplot+=polygon(move(times(horizontal,c),(W*v,0)),fill=False)
v=v+c
c=v+c
sumplot.show()