After you release your software, the version number should be incremented immediately.
Why?
Let's assume you're following a scheme like Semantic Versioning, and you have a build number in the version. So you might have [Major].[Minor].[Patch].[Build]. I am going to call the [Major].[Minor].[Patch] part the version.
You will be creating multiple builds during development. Each build is a development snapshot of your next release. It makes sense to use the same version for your development and release builds. The version indicates what release you're working towardtoward.
If you're preparing for release and the software passes all of its tests, you won't want to rebuild and retest the software just because you had to update the version.
Assuming you're following a scheme like Semantic Versioning you probably have a build number in the version. So you might have [Major].[Minor].[Patch].[Build]. When you eventually make a release, you are stating that "build 1.1.0.23" shall henceforth be referred to as "version 1.1.0".
The increment-after-release model makes sense for branching too. Suppose you have a mainline development branch, and you create maintenance branches for releases. The moment you create your release branch, your development branch is no longer linked to that release's version number. The development branch contains code that is part of the next release, so the version numbershould reflect that.