Esempi e stili di programmazione

Successione di Fibonacci
F(0)=F(1)=1
F(n)=F(n-1)+F(n-2)

Spunti da MCmicrocomputer n.140, maggio 1994

Programmazione imperativa

fib1[n_]:=
	Module[{uno,due,temp,i},
	uno=1;due=1;
	For[i=1,i<n,i++,
	    temp=uno;
	    uno=temp+due;
            due=temp];
        uno] /; IntegerQ[n]

IntegerQ[2.1]

fib1[20]

fib2[n_]:=
	Module[{uno=1,due=1},
	Do[{uno,due}={uno+due,uno},{n-1}];
	uno] /; IntegerQ[n]

fib2[20]

Programmazione alla LISP

fib3[n_ /; IntegerQ[n]] := 
            If[n<2, 1, fib3[n-1] + fib3[n-2]];

fib3[20]

Programmazione dichiarativa simile al Prolog

fib4[0]=1;
fib4[1]=1;
fib4[n_Integer]=fib4[n-1]+fib4[n-2];

g[n_Integer]:=n

g[2]

g[2.2]

fib4[20]

. . .   con memoria

a=b=1+1;
a

fib5[0]=1;
fib5[1]=1;
fib5[n_Integer]:=fib5[n]=fib5[n-1]+fib5[n-2];

fib5[3]

?fib5

fib5[20]

fib5[19]

Un esempio di programmazione funzionale

fibStep[{a_,b_}]:={a+b,a}

Nest[fun,x,3]

Nest[fibStep,{1,1},3] [[1]]

fib6[n_Integer /; n>0]:=
                    Nest[fibStep,{1,1},n-1][[1]]

fib6[20]