I would just create separate paths (end the edge path operation does create its own path). Of course, you can just use the same approach with an outer \foreach whose body contains a full \draw.
The (@) is just a temporary coordinate (that gets redefined at every iteration).
Another option might be the show path construction decoration of the decorations.pathreplacing library. Though, this will just destruct the original path and replaces it with separate paths again.
(I'm using edge here again so that it inherits the attributes of its parent path.)
Code
\documentclass[tikz]{standalone}
\usetikzlibrary{
arrows.meta, % better arrows (→ bounding box)
decorations.pathreplacing}
\begin{document}
\begin{tikzpicture} % edges
\pgfmathsetmacro\N{6}
\pgfmathsetmacro\n{4*\N}
\path[->] (0,0) coordinate (@) foreach \i in {1,...,\n}{
(@) edge coordinate[at end] (@) ++ ({(2*\i-1)*90/\N}:{1-0.01*\i})};
\end{tikzpicture}
\begin{tikzpicture} % separate paths
\pgfmathsetmacro\N{6}
\pgfmathsetmacro\n{4\N}
\coordinate (@) at (0,0);
\foreach \i in {1,...,\n}
\draw[->] (@) -- coordinate[at end] (@) ++ ({(2\i-1)90/\N}:{1-0.01\i});
\end{tikzpicture}
\begin{tikzpicture} % decoration
\pgfmathsetmacro\N{6}
\pgfmathsetmacro\n{4\N}
\path[
->,
decorate,
decoration={
show path construction,
lineto code={\path (\tikzinputsegmentfirst) edge (\tikzinputsegmentlast);},
}] (0,0) foreach \i in {1,...,\n} { -- ++({(2\i-1)90/\N}:{1-0.01\i}) };
\end{tikzpicture}
\end{document}