Содержание
Язык Mathematica
- Вариант 1 (медленно работает)
F[n_] := F[n-1] + F[n-2]; F[0] = F[1] = 1; F[1000]
- Вариант 2 (быстро работает)
F[n_] := (F[n] = F[n-1] + F[n-2]); F[0] = F[1] = 1; F[1000]
Tcl
#!/usr/local/bin/tclsh proc fib {n} { if {$n < 2} { return 1 } else { return [expr {[fib [expr {$n-2}]] + [fib [expr {$n-1}]]}] } } set N [lindex $argv 0] if {$N < 1} { set N 1 } puts [fib $N]
Ruby
#!/usr/local/bin/ruby def fib(n) if n < 2 then 1 else fib(n-2) + fib(n-1) end end N = Integer(ARGV.shift || 1) puts fib(N)
Язык Perl
use strict; use integer; sub fib { return $_[0] < 2 ? 1 : fib($_[0]-2) + fib($_[0]-1); } my $N = ($ARGV[0] < 1) ? 1 : $ARGV[0]; my $fib = fib($N); print "$fib\n";
Язык C
#include <stdio.h> #include <stdlib.h> unsigned long fib(unsigned long n) { if (n < 2) return(1); else return(fib(n-2) + fib(n-1)); } int main(int argc, char *argv[]) { int N = ((argc == 2) ? atoi(argv[1]) : 1); printf("%ld\n", fib(N)); return(0); }
Язык FreePascal
program fibo; uses SysUtils; function fib(N : integer) : longint; begin if N < 2 then fib := 1 else fib := fib(N-2) + fib(N-1); End; var NUM : integer; f : longint; begin if ParamCount = 0 then NUM := 1 else NUM := StrToInt(ParamStr(1)); if NUM < 1 then NUM := 1; f := fib(NUM); WriteLn( IntToStr(f) ); end.
Язык Python
#!/usr/local/bin/python import sys def fib(n): if (n < 2): return(1) return( fib(n-2) + fib(n-1) ) def main(): N = int(sys.argv[1]) #sys.setrecursionlimit(3000) print fib(N) main()
Язык Ocaml
let rec fib n = if n < 2 then 1 else fib (n - 2) + fib (n - 1) let _ = let n = try int_of_string Sys.argv.(1) with Invalid_argument _ -> 1 in Printf.printf "%d\n" (fib n)