Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Is there a way to avoid recursion?

##Why do I have a recursive function? In my script, I have this function that checks if there is a value called "Status".

NOTE: THERE IS CODE IN BETWEEN THE LOOPS AND IF STATEMENTS THAT I DIDN'T SHOW

local function recursive(model)
	for _,child in pairs(model:GetChildren()) do
		for _,descendant in pairs(child:GetChildren()) do
			if descendant:IsA("StringValue") and descendant.Name:lower() =="status" then
				if string.sub(descendant.Value,1,4):lower() == "jump" then
					--code
				elseif string.sub(descendant.Value,1,5):lower() == "speed" then
					--code
				elseif string.sub(descendant.Value,1,4):lower() == "kill" then
					--code
				end
			else
				recursive(descendant)
			end	
		end
	end
end

recursive(newMap) -- newMap is declared before in the actual script

##What is newMap?

newMap is a map that is being cloned into Workspace. I have declared this variable before so you don't have to worry about that.

##Status

Status is supposed be in a model, not added.

As you can see, I am using recursion. However, I want to avoid using recursion as much as possible for good performance in my game. Is there an alternative to recursion?

5 comments

0

This isn't recursive. The recursive function never calls itself. Are you somehow cloning the script itself into its target to recurse?

0

No, actually, you can call a function inside of itself.

0

Oh, I get it. I had insertScript(). I changed the name to recursive() because it would be more understandable. In the actual script, it would clone the scripts to parent of Status. Sorry about the confusion.

0

Rather than calling the function on descendant, maybe instead push descendant to a stack, and have a while loop running until the stack is empty? Each loop would pop an element from the stack, and run what recursive currently does on it.

0

What do you mean by, "... push descendant to a stack ..." and why would using a while loop be faster than using recursion(Not as a negative thing. I just want to know if it is faster. I would like some evidence)?

1 answer

This is the most confusing question. You named the function recursive and you want to know how to stop recursion? Maybe edit the names you grabbed from the freemodel to show more of what you'd like to do.

4 comments

0

First of all, I did not get this from a free model. This is a function from my Round Script I made on my own. You can't assume I got this from a free model. Second of all, I want to avoid recursion, but, I can't find a solution.

0

I also show what I would like to do. I want to find the value Status. I would check if it's a StringValue with IsA(). I would use if-statements to check if the Status is a certain value.

0

But here is the thing, I want to find an alternative of recursion. Is there any alternative? PS: This should've been a comment instead of an answer

0

I understand why you assume this is a free model. The reason why is I forgot to change insertScript() (the original name of the function) to recursive().

This discussion is preserved as it was. New answers, comments, and votes are closed.