As RudiC said, variables that aren't supplied as arguments when an awk function is called are local variables and are initialized to 0 (if used as a number) or to an empty string (if used as a string). Variables that are supplied as arguments when a function is called are still local variables to that function but are initialized from the value supplied.
The unusual thing about the comb () function in this code is that it is called recursively and neither argument is specified the first time it is called (in the END clause), but passes itself a value for the 1st argument (but not the 2nd) when it calls itself recursively. Although there is never an assignment to the variable v in that script, the recursive calls to comb () made by comb () effectively assign a value to v by passing in a value for one argument that is based on the value passed in plus one element in the array created by reading values from the file named infile .