Тем временем Сципион в Испании после различных маневров и нескольких стычек разбил Гасдрубала в битве при Бекуле, хотя и не нанес карфагенянам большого урона. А сам Гасдрубал по приказу Ганнибала отправился в Галлию, оставив Испанию Сципиону. О перемещении войск Гасдрубала стало известно римскому консулу Клавдию Нерону. В 207 году римляне устроили противнику засаду у реки Метавр и разбили его. Гасдрубал, поняв, что все потеряно, намеренно ворвался в римскую когорту, чтобы погибнуть.
Тактика Рима, направленная на затягивание войны и истощение сил карфагенской армии на итальянской земле, стала давать свои результаты. Оторванность от тыловых баз поставила войска Ганнибала в крайне затруднительное положение.
Сципион с армией, воспитанной уже в духе линейной тактики, одержавшей успехи на Пиринейском полуострове, еще повысил занятиями и маневрами боевую подготовку своих войск и высадился в 205 году на африканском берегу близ Карфагена. Осадить Карфаген Сципион был не в силах, но ему удалось вмешаться в нумидийские дела, взять в плен шейха, являвшегося опорой карфагенского влияния, и создать перевес его противнику Массиниссе, который неожиданно взялся помогать Риму.
Осенью 203 года до н. э. Ганнибал с остатками своей армии срочно был отозван из Италии на защиту Карфагена. В Африку Ганнибал прибыл с пехотинцами, но почти без конницы. Вернувшись на родину после 16-летнего отсутствия, он приступил к переустройству своей армии, на что потребовалось до девяти месяцев. Армия формировалась, дабы избежать вмешательства гражданской власти, не в самом Карфагене, а в небольшом приморском городке Хадруметуме. Наконец, летом 202 года до н. э. Ганнибал начал боевые действия против римлян.
Римская армия находилась в долине реки Баградас, когда Сципион был уведомлен, что Ганнибал с 35-тысячным войском движется как раз между ним и тем районом к западу, откуда ожидались нумидийцы. Сципион пошел на риск: он бросил свои сообщения с морем, быстрым фланговым маршем на запад сам пошел на воссоединение с Массиниссой и, получив от него подкрепление в 6000 всадников и 4000 пехотинцев, двинулся навстречу Ганнибалу. Столкновение произошло 19 октября 202 года до н. э. при Нарагаре, однако в истории оно известно как битва при Заме.
Ганнибал распределил свою конницу равномерно по флангам и дал ей указание – не вступая в упорный бой, бежать перед римской и нумидийской конницей, чтобы увести врага во время преследования подальше от поля сражения. Слоны маскировали боевой порядок пехоты и давали Ганнибалу выигрыш во времени – не втягивать в серьезный бой пехотинцев до тех пор, пока не выяснится, удалась ли хитрость с неприятельской конницей.
Поначалу хитрость Ганнибала удалась. Но проницательный Сципион, имевший уже и у себя вторую линию, на этот маневр неожиданно ответил контрманевром – части второй линии римлян вышли из-за флангов первой и быстро вступили в бой с противником, собиравшимся окружить римлян. Карфагенянам пришлось отступать в очень трудных условиях. Налицо был факт: учитель – Ганнибал – нашел достойного ученика в Сципионе. Это было первое в истории применение римлянами линейной тактики.
В итоге Ганнибал проиграл. Армия Карфагена потеряла 10 000 человек, в то время как победители – полторы тысячи. Именно с этого триумфального для него момента римский полководец получил прозвище Сципион Африканский.
В 201 году Римская республика и Карфаген заключили крайне тяжелый для побежденных мир. Карфаген выдал Риму весь свой флот и обязывался в течение 50 лет выплачивать победителю ежегодно 10 000 эвбейских талантов. Все карфагенские владения вне Африки отходили Римской республике. Африканская Нумидия объявлялась независимой от Карфагена. Рим на 600 лет получил полное господство в Средиземноморье.