Annibale, senza che fosse mai stato sconfitto, dall'Italia fu richiamato in Africa, e condusse la guerra contro Publio Scipione, figlio di quello Scipione che egli stesso aveva messo in fuga nei pressi del Rodano, del Po e del Trebbia. Contro costui, poiché erano ormai prosciugate le risorse della patria, volle interrompere temporaneamente la guerra e combattere successivamente, da più forte. Si incontrò per un colloquio con Scipione, ma non pattuirono le condizioni. Dopo quell'episodio combatté contro di lui nei pressi di Zama: fu respinto per due giorni e per due notti, e alla fine arrivò ad Adrumeto. Durante questa fuga, i Numidi, che erano scappati dalla battaglia insieme con lui, gli tesero un'imboscata; non soltanto li eluse, ma in più li sterminò. Ad Adrumeto radunò quelli che rimanevano dalla fuga e, con nuovi reclutamenti, in pochi giorni raccolse molti (uomini).