MS>Допустим, что он выполняется 2 раза. Надо написать код, дающий результат, эквивалентный выполнению приведенного кода дважды, но тоже в три выражения, а не в шесть. На самом деле все сложнее. Вместо 2 может быть некое K, необязательно целое. Может быть как меньше единицы, так и больше. И может быть отрицательным, что эквивалентно откату назад.
По рекурентным соотношениям можно вывести все что угодно:
fi+1 = fi + dfi;
dfi+1 = dfi + ddfi;
ddfi+1 = ddfi + dddfi;
dddfi+1 = dddfi;
Пусть K = 3, тогда
f1 = f0 + df0;
df1 = df0 + ddf0;
ddf1 = ddf0 + dddf0;
dddf1 = dddf0;
f2 = f1 + df1 = f0 + df0 + df0 + ddf0 = f0 + 2df0 + ddf0;
df2 = df1 + ddf1 = df0 + ddf0 + ddf0 + dddf0 = df0 + 2ddf0 + dddf0;
ddf2 = ddf1 + dddf1 = ddf0 + dddf0 + dddf0 = ddf0 + 2dddf0;
dddf2 = dddf0;
f3 = f2 + df2 = f0 + 2df0 + ddf0 + df0 + 2ddf0 + dddf0 = f0 + 3df0 + 3ddf0 + dddf0;
df3 = df2 + ddf2 = df0 + 2ddf0 + dddf0 + ddf0 + 2dddf0 = df0 + 3ddf0 + 3dddf0;
ddf3 = ddf2 + dddf2 = ddf0 + 2dddf0 + dddf0 = ddf0 + 3dddf0;
dddf3 = dddf0;
Для отрицательных K:
fi+1 = fi + dfi; -> fi = fi+1 - dfi = fi+1 - dfi+1 + ddfi = fi+1 - dfi+1 + ddfi+1 - dddfi+1;
dfi+1 = dfi + ddfi; -> dfi = dfi+1 - ddfi = ...;
ddfi+1 = ddfi + dddfi; -> ddfi = ddfi+1 - dddfi = ...;
dddfi+1 = dddfi; -> dddfi = dddfi+1 = ...;
Правда, на обобщение чего-то голова уже не варит.