Последовательность *
:
1, 4, 15, 64, 325, ...
Формула повторения для этого равна
f(1) = 1
f(n) = n * f(n-1) + n
В вашем случае Asterisk
сгенерирует эту последовательность, но в другой шаблон:
1, 1, 4, 4, 15, 15, 64, 64, 325, 325, ...
По сути, каждое значение появляется дважды, поэтому 2 * i-е значение соответствует i-му исходному значению.
Asterisk(n) = 0 if n < 1
Asterisk(n) = Asterisk(n + 1) if n is odd
Asterisk(n) = (n/2) * Asterisk(n-2) + (n/2) if n is even
Программно:
int Asterisk(int n){
if(n < 1) return 0;
if(n % 2 == 1) return mAst(n + 1);
return (n/2) * mAst(n-2) + (n/2);
}