После разгрома римской армии Ганнибалу представилась прекрасная возможность пойти на Рим – он находился всего лишь в 130 километрах и впереди не было значительных сил римлян, – но полководец ею не воспользовался. Когда же его войска появились недалеко от Вечного города, была уже вновь сформирована многочисленная римская армия.
Победа карфагенской армии Ганнибала при Каннах не сломила республиканский Рим и не привела к распаду римско-итальянского союза, на что очень надеялся полководец. Его обращение к совету старейшин с настоятельной просьбой прислать из Карфагена подкрепление осталось без ответа. Он мог рассчитывать только на собственные силы, которые после каждого боевого столкновения с римлянами ощутимо уменьшались.
Не получив подкреплений из Карфагена, Ганнибал обратился за помощью к младшему брату Гасдрубалу, командовавшему карфагенскими войсками в Испании. Тот откликнулся на его призыв, но о переходе войск Гасдрубала стало известно римскому полководцу Клавдию Нерону. В 207 году до н. э. римляне устроили засаду у реки Метавр и разбили карфагенян, а в доказательство своей победы отрубили Гасдрубалу голову и послали Ганнибалу.
Но уйти из Италии и вернуться на родину Ганнибала заставило полученное в 204 году до н. э. известие о том, что римский полководец Сципион вторгся в Карфаген. Постепенно Римская республика перехватила инициативу в войне. Сенат, чтобы увеличить численность римской армии, объявил набор в нее годных для военной службы свободных граждан, начиная с 17-летнего возраста. Кроме того, государство выкупило 8 тысяч молодых рабов, пообещав им свободу, если они вступят в армию.
Впоследствии римляне одержали ряд побед над карфагенянами и их союзниками в Испании, на Сицилии и в самой Италии. Карфагенский военный флот уже не мог вести войну в Средиземном море. Во время взятия римскими войсками сицилийских Сиракуз был убит великий ученый древности Архимед.
Ганнибал, вернувшись на родину после 16 лет отсутствия, собрал новую армию. В марте 202 года до н. э. у города Зама эта армия сразилась с войсками под командованием Сципиона. Если раньше полководец карфагенян побеждал врагов за счет преимущества конницы, то в этой битве она уступила лучше организованной римской. Более того, римские легионы теперь научились бороться с боевыми слонами – они обратили слонов противника в бегство, и те смешали ряды своей, африканской, пехоты. В результате сражения при Заме армия Карфагена потеряла 10 тысяч человек, в то время как римляне – всего 1500 воинов. Разгромивший Ганнибала римский полководец Сципион получил тогда прозвище Африканский.
В 201 году до н. э. Римская республика и Карфаген заключили мир, хотя Ганнибал Барка настаивал на продолжении войны. Условия договора были крайне тяжелыми для побежденных. Можно сказать, что Вторая Пуническая война закончилась полным поражением Карфагена: он отдавал Риму весь свой флот и в течение 50 лет должен был выплачивать победителю большую контрибуцию.