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