Lieste is right, though I guess the question was more about how the pseudo-random numbers are generated so that the terrain is the same. Clearly one cannot use a single pseudo-random generator to get the random numbers for the fractal, because the random numbers picked would be different every time, depending on the sequence of tiles being generated and the initial state of the PRNG.
The random number generation must be deterministic, and so to compute a pseudo-random value for given coordinates of terrain, the equation must involve just the local parameters. For example, you could use the world coordinates as the input, and compute the value from that.
In fact it's not a PRNG anymore, since it cannot have a state, but it's a pseudo-random permutation (PRP). The purpose of PRP is to generate a random-looking output from an input that is usually coherent, like the coordinates are.
If the input isn't very regular, or if the random value is accumulated as in the fractal noise algorithm, you can use a simple LCG equation like this:out = 3141592653UL*in + 1
If the input is regular and the generated numbers are used directly, for example to displace tree positions, this would produce ugly patterns. In that case you need to use something better. Here's code that returns 4-vector of pseudo-random numbers, PRP-ing 2D integer input coordinates:float4 random_2d_perm( int2 coord )
{
const int4 D = int4(1, 17, -43, 71);
const int4 K = int4(2047483673, 1951307951, 1815206923, 1664526161);
int4 p = (K*coord.x + D)*coord.x;
p += coord.y;
p = (K*p + D)*p;
return float4((p&0xffff) - 0x8000) * float(1.0/0x8000);
}