Il existe plusieurs problèmes dans votre code.
- d'abord, il ne compile pas parce que vous accédez à la
j
variable non définie.
- Le calcul de la factorielle en utilisant une boucle est la manière itérative de le faire. Vous cherchez le récursive façon.
Qu'est-ce qu'une récursivité? Une fonction récursive s'appelle elle-même. Donc dans votre cas calculateFactorial
a besoin d'un appel à lui-même.
Comment la fonction factorielle est-elle déclarée?
En d'autres termes:
La factorielle de n
est déclarée comme
- 1 lorsque
n
est égal à 0
- la factorielle de
n-1
multipliée par n
lorsque n
est supérieur t han 0
Vous voyez la définition de la fonction factoriel est déjà récursive car il fait référence à lui-même quand n
est supérieur à 0
.
Cela peut être adopté au code Pascal:
function Factorial(n: integer): integer;
begin
if n = 0 then
Result := 1
else if n > 0 then
Result := Factorial(n - 1) * n;
end;
Non, nous pouvons faire quelques optimisations:
- La fonction factoriel ne fonctionne pas avec les nombres négatifs. Donc, nous changeons le type de données de
integer
(qui peut représenter des nombres négatifs) à longword
(qui ne peut représenter que des nombres positifs).
- La plus grande valeur qu'un
longword
peut stocker est 4294967295, ce qui est deux fois plus grand qu'un longint
peut stocker. Maintenant que nous n'avons pas besoin de nous préoccuper des nombres négatifs, nous pouvons réduire une instruction if
.
Le résultat ressemble à ceci:
function Factorial(n: longword): longword;
begin
if n = 0 then
Result := 1
else
Result := Factorial(n - 1) * n;
end;
'j' n'est pas déclarée nulle part. De plus, 'A' ne change jamais dans votre boucle, donc' j' (de 'j: = A-1' ne change jamais, et, par conséquent,' A * j' ne change jamais.) Votre programme factoriel retourne 'A * (A- 1) '. – lurker
La récursivité serait 'A * calculateFactorial (A-1)', aucune boucle nécessaire. –
Les gars merci de m'aider. J'ai finalement eu la réponse que je cherchais. A propos de la boucle Je sais que nous pouvons faire de la récursivité sans cela mais la question de mon conférencier veut que nous utilisions la boucle, c'est pourquoi. –