Faits : A. A.a. Le 18 janvier 2018, A._ a déposé plainte contre son voisin X._. Il lui reprochait de l'avoir agressé, accompagné d'une personne inconnue, le 14 décembre 2017, dans le couloir menant aux caves de l'immeuble dans lequel le plaignant vivait à B._, en lui donnant des coups sur la tête avec un objet non identifié, ce qui lui a occasionné des saignements au crâne et à l'arcade sourcilière ainsi qu'une brève perte de connaissance. Lorsqu'il avait repris ses esprits, les individus avaient disparu. Le plaignant a expliqué avoir tenté dans un premier temps de cacher l'existence de l'agression à son épouse, prétextant être tombé. Cependant, après que cette dernière a aperçu des tâches de sang dans la cave le 11 janvier 2018, il lui a expliqué qu'il avait été victime d'une agression et que ce sang était bien le sien. Son épouse a pris peur et a alors appelé la police. A.b. Le constat médical réalisé le 14 janvier 2018, produit par le plaignant à l'appui de sa plainte, avait mis en évidence plusieurs croûtes au niveau de l'hémicrâne gauche, une cicatrice de plaie d'environ 1 cm sous l'arcade sourcilière gauche ainsi qu'une légère tuméfaction de la partie gauche de la lèvre supérieure. Le médecin avait constaté que l'image radiologique était compatible avec les coups décrits par son patient. A.c. Entendu par la police, X._ a contesté avoir participé à l'agression, déclarant qu'il n'avait rien à dire sur les faits qui lui étaient reprochés, qu'il n'avait pas frappé le plaignant et que le jour en question, il n'était pas allé à la cave car " il n'avait pas que ça à faire ". Il a affirmé que le plaignant, qui passait son temps à le surveiller depuis sa fenêtre, était jaloux de lui, certainement en raison du fait que sa compagne bénéficiait d'un " macaron handicapé " pour sa voiture et que le couple possédait deux véhicules. Lors de son audition par la police, le plaignant a pour sa part indiqué que, trois mois avant l'agression dénoncée, alors qu'il discutait avec une voisine, X._ était arrivé et l'avait agrippé par le col de sa veste, sans le frapper. A.d. Par ordonnance du 21 mars 2018, le Ministère public de la République et canton de Genève a refusé d'entrer en matière sur la plainte. Les frais de procédure ont été laissés à la charge de l'Etat. B. Par arrêt du 4 juillet 2018, la Chambre pénale de recours de la Cour de justice de la République et canton de Genève a rejeté le recours formé par A._ contre l'ordonnance du 21 mars 2018. Les frais de la procédure de recours, fixés à 800 fr., ont été mis à la charge de A._. C. Contre cet arrêt, A._ forme un recours en matière pénale ainsi qu'un recours constitutionnel subsidiaire. Il conclut, avec suite de frais et dépens, principalement à l'annulation de l'arrêt entrepris et à l'ouverture d'une instruction pénale pour les faits dénoncés, l'instruction étant confiée à un autre procureur que celui qui a rendu l'ordonnance du 21 mars 2018. Subsidiairement, il conclut à ce que les frais de procédure mis à sa charge par la cour cantonale soient réduits à un montant de 100 francs. Invités à se déterminer, la cour cantonale et le ministère public ont conclu au rejet du recours, se référant aux considérants de l'arrêt attaqué.