- Dado N, o factorial é multiplicar dende N ata 1.
- Por definición, 0! = 1.
- Non existe o factorial dun N negativo.
- Bucle namentres (repetir en Scratch), condicional simple.
- Variables: unha contador, outra para gardar o valor máximo.
Solución proposta sen recursividade (lembra, non é única):
Diagrama de fluxo (Pseint) | Scratch |
Pseudocódigo (Pseint) | Python 3 |
Exercicio:
- Facer que o algoritmo represente os cálculos intermedios
Vale, e agora imos facelo con recursividade, para ver que é máis compacto:
Diagrama de fluxo (Pseint) | Scratch |
|
|
Pseudocódigo (Pseint) | Python 3 |
Agora deberías escribir o código de Python e executalo.
Tamén deberías executalo secuencialmente por que ao mellor non é tan sinxelo como parece. A pregunta que pode xurdir é: onde se acumula a multiplicación se non hai unha variable que faga (é decir, se 4! = 4·3! onde está gardado o 4 antes de facer o proceso recursivo para calcular 3!?). Para axudar a comprender isto podemos visualizar os pasos secuenciais:
1. factorial(5)
2. 5 * factorial(4)
3. 5 * 4 * factorial(3)
4. 5 * 4 * 3 * factorial(2)
5. 5 * 4 * 3 * 2 * factorial(1)
6. returns 1
7 returns 2 * 1 = 2
8. returns 3 * 2 = 6
9. returns 4 * 6 = 24
10. returns 5 * 24 = 120
Exercicio:
- Falta a proposito o condicional de erro para cando o nº sexa negativo. Modifica o programa para que inclúa esta condición.