Playing in his 140th career final, Federer saved the only break point he faced and converted four of his eight opportunities to clinch his 92nd career title in 53 minutes.
"I played unbelievably well. I felt good and never let up," said Federer, who dropped just nine points on his serve. "It was my best game this week. Nearly everything worked out for me."
Federer, who skipped the clay-court season after winning the Miami Open in early April, claimed his fourth title of the year, matching Rafael Nadal's tally, and he will be seeded ahead of his Spanish rival for Wimbledon, which starts in eight days.
Federer had already won the Australian Open before titles in Indian Wells and Miami in 2017.
The 18-time Grand Slam champion was surprised by German veteran Tommy Haas on his return from the two-month break last week in Stuttgart but brushed off any doubts over his form in Halle.
Against the 20-year-old Zverev, who lost last year's final to Florian Mayer, Federer raced to a 4-0 lead before wrapping up the first set in 22 minutes. Zverev created his only break chance in the opening game of the second, but ultimately was unable to show why he is regarded as one of the sport's brightest prospects.
"You could have been a bit nicer and allowed me a couple more points," Zverev joked to his idol.
Federer had words of affection for Zverev, who won their semifinal in Halle last year.
"He's a very nice lad. I'm very happy for him, how he's developed in the last years. The future belongs to him," Federer said.