Before Save Flows operate the same as before insert/update Apex triggers. They modify the record after standard validations but before the first save noted in Triggers and Order of Execution. Unlike the After Save triggers, they do not cause another round of validation/flow/trigger execution, and are therefore very efficient at updating the triggering record (very nearly as fast as a before insert/update Apex trigger).
You can, and should, use Before Save Flows whenever possible, as they do not trigger a recursive DML operation. Note that in a After Save flow, an Assignment is not sufficient to update the record. You must also use an Update Record element to actually save any changes, which is also what causes the second round of validations and triggers to execute. Using multiple Update Record elements will result in even further DML operations being executed, so we must take care to combine all such updates into a single Flow and a single Update Records element, if possible.
Note that flows are bulkified, in the sense that multiple records being processed at once will execute the flows essentially "in parallel", but only in the sense that each Update Records element will act as a blocker, and then be bulkified from there. If you have a conditional decision that ends up going to two different Update Records elements, either because another blocking element is on a decision path, or because you used different elements, multiple updates may be triggered. Always try to minimize the number of blocking paths to take full advantage of this feature.