fakultet.cDenna 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.
/*
* Beräknar fakulteten av argumentet med och utan rekursion.
* Observera att rekursion av det här slaget fyller stacken ganska fort.
* Kan räkna 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 strängar innehållande argumenten.
*/
int main(int argc, char* argv[])
{
int n;
/* Programmets namn ligger i det första argumentet,
* vi vill därför att det ska finnas två argument.
*/
if (argc != 2)
{
printf("Usage: Fakultet Nummer\n");
return EXIT_FAILURE;
}
/* Gör om strängen 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;
}
|