Your question isn't entirely clear. Are you creating a new A inside every B and a new B inside every A? If so, then no, you will always get a stack overflow because you have initiated the creation and initialization of an infinite number of objects.
If, however, the A that is inside B.Initialize() is merely a reference to an already-existing A (as opposed to a newly created one inside B.Initialize()) then you merely need to create a "base case" that escapes the recursion. You can check to see if A.IsInitialized and only call A.Initialize() if it's not. Do the same with the B that is inside A.