Jeśli zdefiniujemy, że kolejność sumowania w g + fun (h-1) + zabawa (n-4) jest od lewej do prawości, to jest to dobrze zdefiniowany problem. Z tym mam wartości dla zabawy (n), n = 1, ..., 15: wartość
3, 6, 10, 15, 33, 74, 154, 295, 575, 1143, 2269, 4414, 8508, 16396, 31634
Return Of Fun (n) jest oceniany jako sekwencji sumowania z elementami nie-malejącym. Każdy summand jest większy niż poprzedni (return g ++;) lub taki sam jak poprzedni (return g + fun() + fun()). Sekwencja wykonywania instrukcji return zależy tylko od parametru wejściowego fun(). Tak więc, przy g ustawionej na wartość początkową! = 0 otrzymujemy te same sumy co przy g = 0, ale każdy summand jest większy dla tej samej wartości początkowej. Z tym, zabawy (n) o początkowej zawartości G> 0 powróci wartość jest g * ilość wykonanych instrukcji obie większych niż w początkowej zawartości G = 0.
zdefiniować (n), jak liczba wykonanych instrukcji obie podczas wykonywania fun (n) i G (n) liczba wykonanej instrukcji return w jeśli klauzula (taka sama jak liczba instrukcji g ++). Dla A i G posiada:
A(n) = A(n-1) + A(n-4) + 1
G(n) = G(n-1) + G(n-4)
A(n) = 1 and G(n) = 1, for n <= 0
z tych obserwacji można zauważyć, że dla n> 0 zachodzi:
fun(n) = fun(n-1) + G(n-1) * A(n-4) + fun(n-4)
Prosta implementacja Pythona:
def x(h):
Rg = { -3:1, -2:1, -1:1, 0:1 }
Ra = { -3:1, -2:1, -1:1, 0:1 }
F = { -3:1, -2:1, -1:1, 0:1 }
for i in xrange(1, h+1):
F[i] = F[i-1] + Rg[i-1]*Ra[i-4] + F[i-4]
print i, F[i]
Rg[i] = Rg[i-1] + Rg[i-4]
Ra[i] = Ra[i-1] + Ra[i-4] + 1
@stakx: do wyrażania g + zabawa (h-1) + zabawa (h-4) nie możemy zagwarantować porządku oceny, zwłaszcza nie w C.
Gdzie jest n zdefiniowany? –
@Michael Myślę, że @aristotaly odnosi się do tej wielkiej notacji rzeczy-a-ma-jig. –
nie usunął tagu pracy domowej jako wszystkich pseudo-tagów (bezużyteczne, aby sklasyfikować pytanie)? – kriss