facts: array[2..12] of integer;
function TForm1.calculate(f: integer): integer;
begin
if f = 1 then
Result := f
else if f > High(facts) then
Result := High(Integer)
else if (facts[f] > 0) then
Result := facts[f]
else begin
facts[f] := f * Calculate(f-1);
Result := facts[f];
end;
end;
initialize
for i := Low(facts) to High(facts) do
facts[i] := 0;
После первого вычисления факториала, большего или равного требуемому значению, этот алгоритм просто возвращает факториал за постоянное время O (1).
Следует учитывать, что только int32 может содержать до 12!
Замените \ n на \ r \ n - так элементы управления Windows представляют символы новой строки (но см. Примечание внизу):
textBox1.Text = generatedCode.Replace("\n", "\r\n");
или
textBox1.Text = generatedCode.Replace("\n", Environment.NewLine);
Примечание. Как обсуждалось в комментариях, вы может захотеть использовать Environment.NewLine
. Однако неясно - не совсем ясно, какой разделитель строк элементы управления Windows Forms должны использовать, когда они не работают в Windows. Должны ли они использовать платформу по умолчанию или Windows (поскольку это порт элемента управления Windows GUI)? В одном из примеров в MSDN используется Environment.NewLine
, но до сих пор я видел ужасно неправильные примеры в MSDN, а в документации просто не указано, что должно быть.
В идеальном мире у нас был бы только один разделитель строк - и даже во втором лучшем мире
Обычно \ r \ n
возвращает мне новую строку в текстовом поле. Попробуйте заменить \ n
на \ r \ n
, только будьте осторожны, у вас нет смеси \ r \ n
и \ n
Добавьте символ возврата каретки (\ r), и он должен работать:
TextBox1.Text = "First line\r\nSecond line";