Итерационный факториал в Алголе 68
Я полагаю, изменить код ниже, чтобы сделать факториал. Кто-нибудь может мне помочь с этим? Это Фибоначчи.
PROC print fibo = (INT n) VOID:
BEGIN
INT a:= 0, b = 1;
FOR i FROM 1 TO n DO
print((whole(i,0), "==>", whole(b,0), new line));
INT c = a + b;
a := b;
b := c
OD
END;
INT k = 40;
print("Compute Factorial");
print((whole(k,0), new line));
print fact(k)
1 ответ
Фибоначчи на самом деле сложнее, чем факториал, просто потому, что вы должны помнить два предыдущих термина, чтобы получить следующий термин.
Однако суть та же. С помощью factorial вы просто умножаете все числа от 1 до аргумента, например, в следующем псевдокоде:
fact = 1
for i = 1 to argument:
fact = fact * i
Вот и все. Теперь вам просто нужно превратить это в Algol, и, возможно, где-нибудь рассмотреть курс, где они используютнемного более современные языки:-) Хотя я должен любить язык, который использует bash
-стильif/fi
case/esac
методы для их do
петли (do/od
). Я хотел бы следующий bash
итерация, чтобы использовать это, а не противоречивыеdo/done
,
Спойлеры ниже!Если это курсовая работа, не читайте, пока не попробуете предложения выше.
Я призываю вас попробовать это самостоятельно, так как это сделает вас лучшим программистом и (при условии, что это курсовая работа) уменьшит вероятность того, что вы будете наказаны за плагиат.
Однако, чтобы завершить этот ответ, это будет моя первая попытка (помните, что на самом деле у меня нет компилятора Algol-68, поэтому может потребоваться некоторая отладка):
PROC facto = (INT n) INT:
BEGIN
INT a := 1;
FOR i FROM 1 TO n DO
a := a * i;
OD
END;
Я изменил тип возврата с void
в int
и надеюсь, что я правильно помню, что возвращаемое значение автоматически принимается из последнего вычисленного выражения.