fork download
  1. #include <stdio.h>
  2.  
  3. int super (int n, int m) {
  4. if (m == 1) return 1;
  5. if (n == 1) return super (m - 1, m - 1);
  6. return n * super(n - 1, m);
  7. }
  8.  
  9. int sfat(n) {
  10. return sfat2(1, n, 1); // Vai de 1 a n, e o valor acumulado é 1
  11. }
  12.  
  13. int sfat2(inicio, fim, acumulador) {
  14. if ( inicio > fim )
  15. return acumulador;
  16. return acumulador * sfat2(inicio+1, fim, inicio*acumulador);
  17. }
  18.  
  19. int sfat_cauda(n) {
  20. return sfat2_cauda(1, n, 1, 1); // Acumula (n-1)! e o resultado
  21. }
  22.  
  23. int sfat2_cauda(inicio, fim, fat_acc, sfat_acc) {
  24. if ( inicio > fim )
  25. return sfat_acc;
  26. return sfat2_cauda(inicio+1, fim, inicio*fat_acc, inicio*fat_acc*sfat_acc);
  27. }
  28.  
  29. int main(void) {
  30. for ( int i = 1 ; i < 8 ; i++ )
  31. printf("%d %d %d\n", super(i,i), sfat(i), sfat_cauda(i));
  32. return 0;
  33. }
  34.  
Success #stdin #stdout 0s 2112KB
stdin
Standard input is empty
stdout
1 1 1
2 2 2
12 12 12
288 288 288
34560 34560 34560
24883200 24883200 24883200
857276416 857276416 857276416