# Is there a formula to determine the total number of constitutional isomers?

Is there a trick or a formula that given a molecular formula, allows you to know exactly how many constitutional isomers can be formed with that many atoms? Or is it more of a trial-and-error technique?

I'm looking for something along the lines of $2^n$ of maximum number of possible stereo-isomers, where n is the number of stereogenic centers present in a compound.

• Constitutional isomers have nothing to do with stereogenic centers?
– Jori
Jun 26 '15 at 13:33

In principle, the maximum number of configurational stereoisomers (not constitutional isomers) is $$N_\text{max}=2^{\left(n+m\right)}$$ where $n$ is the number of stereocentres (R or S) and $m$ is the number of stereogenic double bonds (E or Z).

However, the actual number of different stereoisomers may be smaller than the maximum number $N_\text{max}$ if constitutional symmetry is present in the molecule (meso-compounds).

Furthermore, the actual number of practically possible stereoisomers may be reduced by ring strain or other geometrical limitations.

Nevertheless, the maximum number may also be exceeded if hindered rotation about single bonds or other steric interactions result in additional stereoisomers.

There seems to be some confusion here : in order to determine the number of stereo-isomers of a molecular formula (say C4H11N) you would need to first know the number of constitutional isomers as you need to know how many stereogenic centers across all the structures.

There are a bunch of existing questions on constitutional isomers (a, b, c, ...) but the summary is : "it is tricky without software for anything more than very small formulae".

There are mathematical formulae for determining the count of constitutional isomers, although the most powerful techniques are non-trivial (such as those based on the Pólya enumeration theorem). To efficiently list a non-redundant set of compounds from an elemental formula is possibly even harder, as it requires a mechanism to avoid duplicates in the output.