login
a(1)=1; for n > 1, if n appears in the sequence then a(n) = lastindex(n), where lastindex(n) is the index of the last appearance of n. Otherwise a(n) = a(n-1) - n unless that result is already in the sequence or would be negative; otherwise, a(n) = a(n-1) * n.
1

%I #22 Aug 26 2023 02:52:43

%S 1,2,6,24,19,3,21,13,4,40,29,17,8,112,97,81,12,216,5,100,7,154,131,4,

%T 100,74,47,1316,11,330,299,267,234,200,165,129,92,54,15,10,410,368,

%U 325,281,236,190,27,1296,1247,1197,1146,1094,1041,38,2090,2034,1977,1919,1860,1800,1739,1677,1614

%N a(1)=1; for n > 1, if n appears in the sequence then a(n) = lastindex(n), where lastindex(n) is the index of the last appearance of n. Otherwise a(n) = a(n-1) - n unless that result is already in the sequence or would be negative; otherwise, a(n) = a(n-1) * n.

%e a(6) = 3, as a(3) = 6 = n, thus a(6) = 3.

%e a(28) = 1316 because subtracting 28 from the previous term (47) would give 19, which is already in the sequence, so multiply 47 by 28 to get 1316.

%e a(100) = 25, as a(25) = 100 = n, thus a(100) = 25.

%t a[1] = 1; a[n_] := a[n] = Module[{s = Array[a, n - 1], a1}, If[MemberQ[s, n], Position[s, n][[-1, 1]], a1 = a[n - 1] - n; If[a1 < 0 || MemberQ[s, a1], a[n - 1]*n, a1]]]; Array[a, 100] (* _Amiram Eldar_, Jul 23 2023 *)

%o (MATLAB)

%o function a = A363962( max_n )

%o a = 1;

%o for n = 2:max_n

%o r = find(a == n,1,'last');

%o if ~isempty(r)

%o a(n) = r;

%o else

%o k = a(n-1) - n;

%o if k > 0 && isempty(find(a == k, 1))

%o a(n) = k;

%o else

%o a(n) = a(n-1) * n;

%o end

%o end

%o end

%o end % _Thomas Scheuerle_, Jul 03 2023

%Y Cf. A005132, A340612, A354833, A362332.

%K nonn

%O 1,2

%A _Kelvin Voskuijl_, Jun 29 2023