Una implementazione modificata e piu' efficiente e'
codice:
typedef struct numeriDifib
{
int num;
struct numeriDifib *suc;
} Nf;
Nf *creaListaFib(int n)
{
int i, prev, curr, res;
Nf *pHead=NULL, **ppNewItem;
if(n==0) return(NULL);
pHead = (Nf *)malloc(sizeof(Nf));
pHead->num = 1;
pHead->suc = NULL;
ppNewItem = &pHead->suc;
prev = 1;
curr = 0;
for(i=2; i<=n; i++)
{
res = prev+curr;
(*ppNewItem) = (Nf *)malloc(sizeof(Nf));
(*ppNewItem)->num = res;
(*ppNewItem)->suc = NULL;
ppNewItem = &((*ppNewItem)->suc);
curr=prev;
prev=res;
}
return(pHead);
}
int main(void)
{
Nf *fib = creaListaFib(30);
Nf *tmp = fib;
do
{
printf("%I64d\n", tmp->num);
tmp = tmp->suc;
} while(tmp);
return 0;
}