Mathematica, 159 100 87 86 85 bytes
n=3;1-Mean@Sign[##&@@Norm/@({1,0,0,-1}~t~n.Partition[#,2,1,1])&/@{1,-1}~(t=Tuples)~n]
Para mudar nbasta alterar a definição da variável no início.
Como a força bruta é bastante lenta, mas aqui estão os oito primeiros resultados:
n P(n)
1 1/2
2 3/8
3 7/32
4 89/512
5 269/2048
6 903/8192
7 3035/32768
8 169801/2097152
O último já levou 231 segundos e o tempo de execução é terrivelmente exponencial.
Explicação
Como eu disse, é força bruta. Basicamente, estou apenas enumerando tudo possível Ae Bcalcule os dois produtos de ponto para cada par possível e, em seguida, encontre a fração de pares que produziu {0, 0}. As funções combinatória e de álgebra linear do Mathematica foram bastante úteis no golfe:
{1,-1}~(t=Tuples)~n
Isso gera todas as n-tuplas que contêm 1ou -1, ou seja, tudo possível A. Pois n = 3isso é:
{{1, 1, 1},
{1, 1, -1},
{1, -1, 1},
{1, -1, -1},
{-1, 1, 1},
{-1, 1, -1},
{-1, -1, 1},
{-1, -1, -1}}
Para calcular B, fazemos quase o mesmo:
{1,0,0,-1}~t~n
Repetindo 0, duplicamos cada tupla para cada um 0que contém, aumentando assim a 0probabilidade de duas vezes 1ou -1. Novamente usando n = 3como exemplo:
{{-1, -1, -1},
{-1, -1, 0}, {-1, -1, 0},
{-1, -1, 1},
{-1, 0, -1}, {-1, 0, -1},
{-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0}, {-1, 0, 0},
{-1, 0, 1}, {-1, 0, 1},
{-1, 1, -1},
{-1, 1, 0}, {-1, 1, 0},
{-1, 1, 1},
{0, -1, -1}, {0, -1, -1},
{0, -1, 0}, {0, -1, 0}, {0, -1, 0}, {0, -1, 0},
{0, -1, 1}, {0, -1, 1},
{0, 0, -1}, {0, 0, -1}, {0, 0, -1}, {0, 0, -1},
{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0},
{0, 0, 1}, {0, 0, 1}, {0, 0, 1}, {0, 0, 1},
{0, 1, -1}, {0, 1, -1},
{0, 1, 0}, {0, 1, 0}, {0, 1, 0}, {0, 1, 0},
{0, 1, 1}, {0, 1, 1},
{1, -1, -1},
{1, -1, 0}, {1, -1, 0},
{1, -1, 1},
{1, 0, -1}, {1, 0, -1},
{1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 0, 0},
{1, 0, 1}, {1, 0, 1},
{1, 1, -1},
{1, 1, 0}, {1, 1, 0},
{1, 1, 1}}
Agora, para cada possível A, queremos o produto escalar de cada uma delas possível B, com A[1 .. n]e A[2 .. n+1]. Por exemplo, se nossa atual Aé {1, 1, -1}, queremos o produto escalar com ambos {1, 1, -1}e com {1, -1, 1}. Como todas as nossas Bjá são convenientemente as linhas de uma matriz, queremos as duas sublistas Acomo colunas de outra matriz, para que possamos calcular um simples produto de ponto entre elas. Mas a transposição {{1, 1, -1}, {1, -1, 1}}simplesmente fornece {{1, 1}, {1, -1}, {-1, 1}}qual é apenas uma lista de todas as sublistas cíclicas de 2 elementos A. É o que isso faz:
Partition[#,2,1,1]
Então calculamos isso e pegamos o produto escalar com nossa lista de B. Como agora obtemos uma lista aninhada (uma vez que cada possível Agera um vetor separado), as aplainamos ##&@@.
Para saber se um par {x, y}é {0, 0}calculamos Sign[Norm[{x,y}]] onde Normdá √(x²+y²). Isso dá 0ou 1.
Finalmente, uma vez que agora só quero saber as frações de 1s em uma lista de 0s e 1s toda necessidade que é a média aritmética da lista. No entanto, isso gera a probabilidade de que pelo menos um produto de ponto seja diferente de zero, então subtraímos 1para obter o resultado desejado.
nseriam úteis. Talvez também um exemplo explícito de A, B e dos dois produtos internos possa ajudar.