Цикл проходится по всем стекам и если стек жив, прибавляет к x1 (параметру с =перем) 1. В конце выполнения он записывает в x2 (параметр с ?перем) x1. И соответственно в y-1 должно возвратиться количество ненулевых стеков - 1. Но ничего подобного не происходит. Возвращается -1, как будто все проходы цикда никак не изменили параметр с =перем, а последний вернул пришедшее же значение.