I would use dynamic structure access like so:
s.(a)
Learn more at the Mathworks website!
Also, if we look at your example function, I notice you're not passing in the structure as an argument, maybe it's global, but here an example of this technique using your function as a framework:
function out = call(s,a)
out = s.(a);
end
Then to use the function, I try:
>> s = struct('hello',42)
s =
hello: 42
>> call(s,'hello')
ans =
42
Works great with no recursion limit! If you're still getting a recursive function, try adding more of your code to the question, we'll get to the bottom of this!
HTH