...with the new type system :
TYPE Ta
FUNCTION recurse%:value%
IF value%<=1 THEN RETURN 1
RETURN value%*recurse(value%-1)
ENDFUNCTION
ENDTYPE
LOCAL t AS Ta
DEBUG "Final value : "+t.recurse(5)+"\n"
END
Recursion works fine.
Now, if you expand this to calculate how long it takes against a regular function :
TYPE Ta
FUNCTION recurse%:value%
IF value%<=1 THEN RETURN 1
RETURN value%*recurse(value%-1)
ENDFUNCTION
ENDTYPE
LOCAL t AS Ta
LOCAL r,b
r=GETTIMERALL()
DEBUG "Final value : "+t.recurse(6)+"\n"
b=GETTIMERALL()-r
DEBUG "Time taken : "+b+"\n"
r=GETTIMERALL()
DEBUG "Final value : "+recurse2(6)+"\n"
b=GETTIMERALL()-r
DEBUG "Time taken : "+b+"\n"
END
FUNCTION recurse2%:value%
IF value%<=1 THEN RETURN 1
RETURN value%*recurse2(value%-1)
ENDFUNCTION
I get :
Final value : 720
Time taken : 3.857474154
Final value : 720
Time taken : 3.429867122
Increase the recursive value slightly :
Final value : 40320
Time taken : 3.979530566
Final value : 40320
Time taken : 4.035234164
And finally once more :
Final value : 479001600
Time taken : 3.064517054
Final value : 479001600
Time taken : 3.275043887
The first value is using a function in a TYPE, whilst the second isn't...
What is interesting to note is that with an iteration and a substantial initial value, using a function in TYPE is quicker than a standard function.
Which leads me to this :
TYPE Ta
FUNCTION recurse%:value%
LOCAL a,b
LOCAL x%
a=GETTIMERALL()
FOR x%=1 TO 1000
NEXT
b=GETTIMERALL()-a
DEBUG "Result : "+b+"\n"
ENDFUNCTION
ENDTYPE
LOCAL t AS Ta
LOCAL r,b
t.recurse(12)
recurse2(12)
END
FUNCTION recurse2%:value%
LOCAL a,b
LOCAL x%
a=GETTIMERALL()
FOR x%=1 TO 1000
NEXT
b=GETTIMERALL()-a
DEBUG "Result : "+b+"\n"
ENDFUNCTION
Now, you may think that the results should be same, but they are not, with the TYPE function performing somewhat slower than the standard function :
Result : 2.293677535e-002
Result : 2.211760543e-002
This is to be somewhat expected as classes add a slight decrease to a functions performance. However, the good news is that, like the first example, the bigger the loop, the function in the type produces a quicker result than a standard function.
Whilst the times are usually in the 100's of milliseconds, it shows that if you do as much work in a function in a type as possible, its execution speed should be better than a standard function.