Recaman's sequence: Difference between revisions

Content added Content deleted
(Add PL/I)
Line 1,870: Line 1,870:
Terms up to a[328002] are needed to generate 0 to 1000
Terms up to a[328002] are needed to generate 0 to 1000
</pre>
</pre>

=={{header|PL/I}}==
<lang pli>recaman: procedure options(main);
declare A(0:30) fixed;
/* is X in the first N terms of the Recaman sequence? */
find: procedure(x, n) returns(bit);
declare (x, n, i) fixed;
do i=0 to n-1;
if A(i)=x then return('1'b);
end;
return('0'b);
end find;
/* generate the N'th term of the Recaman sequence */
generate: procedure(n) returns(fixed);
declare n fixed;
if n=0 then
A(0) = 0;
else do;
declare (sub, add) fixed;
sub = A(n-1) - n;
add = A(n-1) + n;
/* A(n-1) - n not positive? */
if sub <= 0 then
A(n) = add;
/* A(n-1) - n already generated? */
else if find(sub, n) then
A(n) = add;
else
A(n) = sub;
end;
return(A(n));
end generate;
declare (i, j, x) fixed;
put skip list('First 15 members:');
do i=0 to 14;
put edit(generate(i)) (F(3));
end;
put skip list('First repeated term: ');
do i=15 repeat(i+1) while(^find(generate(i), i)); end;
put edit('A(',i,') = ',A(i)) (A,F(2),A,F(2));
end recaman;</lang>
{{out}}
<pre>First 15 members: 0 1 3 6 2 7 13 20 12 21 11 22 10 23 9
First repeated term: A(24) = 42</pre>


=={{header|PureBasic}}==
=={{header|PureBasic}}==