I do support such attitude that it should be avoided by any cost in higer language
This statement (i.e. avoid goto by any cost) implies that you are happy to replace:
label foo;
begin
...
goto foo;
...
foo:
...
with this
type TGotoFooException = class;
begin
try
...
raise TGotoFooException.Create;
...
except on e: TGotoFooException do;
end;
...
And I personally don't know anyone who would bring forth that argument.
Goto is not intrinsicly bad, goto often leads to less readable code, but, if you replace goto with something that is even less readable, you just made your code worse, even though you got rid of goto.
One parallel. Toyota had an accident some 5 years ago or so with unpredictable car acceleration which was consequance of extensive use of recursion in the software (leading stack overflow, IIRC), which is even strictly forbiden by MISRA standards.
[...]
Thus, some rules need to be followed as there is great chances that badly designed and implemented software cost even lives. Fine is we programming for fun, but in industry that is very serious matter.
Yes, but most people don't write safty crucial software for the automobile industry. If a car crashes because of a software bug it results in a lot of damage, including human damage. This must be avoided even at very low risks. If the size calculator for an online shop crashes and the customer has to reload the page, it is annoying but if it doesn't happen to often no one bats an eye.
Very ofter a recursive solution is the easiest solution, and saying that you need to invest a lot more time to change this function for in an online shop software to be iterative because in the automobile industrie this could result in human casulties is a little bit far fetched.
And this might not even be the general case, look at functional languages like Haskell, Haskell can't be used without recursion, and in haskell there is no such thing as a stack overflow (because in haskell there is no such thing as a stack).
These rules are dependent on their context, and while they may be very sensible in the automobile or avionics industry, for your run of the middle webdev or app developer they are simply restricting you, without you gaining anything, because no one cares if your app crashes occasionally as long as most of the time it works fine.
Also, optimizing tail recursion to an iterative function is one of the baseline optimizations most compilers do. So simple recursion will actually be compiled to iterative code anyway