fakultet.c

Denna kod är public domain. Om ni hittar fel eller vill ändra något i koden blir jag jätteglad om ni skickar dessa ändringar till jesper [at] fantasi [punkt] se.


/*
 * Berknar fakulteten av argumentet med och utan rekursion.
 * Observera att rekursion av det hr slaget fyller stacken ganska fort.
 * Kan rkna upp till 21! p 32-bitars arkitektur.
 */

#include<stdio.h>
#include<stdlib.h>

static unsigned long rek_fakultet(int n)
{
   if (n == 1)
      return 1;

   return rek_fakultet(n - 1) * n;
}

static unsigned long fakultet(int n)
{
   int x = 1;
   unsigned long sum = 1;
   while (x < n + 1)
      sum *= x++;
   return(sum);
}

/*
 * argc - Antalet argument
 * argv - En array av strngar innehllande argumenten.
 */
int main(int argc, char* argv[])
{
   int n;

   /* Programmets namn ligger i det frsta argumentet,
    * vi vill drfr att det ska finnas tv argument.
    */
   if (argc != 2)
   {
      printf("Usage: Fakultet Nummer\n");
      return EXIT_FAILURE;
   }

   /* Gr om strngen i det andra argumentet till ett tal */
   n = atoi(argv[1]);

   printf("%d! = %lu = %lu\n", n, rek_fakultet(n), fakultet(n));
   return EXIT_SUCCESS;
}