Số Fibonacci âm


28

Có lẽ tất cả các bạn đều biết trình tự của Wikipedia:

fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)
fibonacci(0)=0
fibonacci(1)=1

Nhiệm vụ của bạn đơn giản như nó có thể là:

  • Cho số nguyên Ntínhfibonacci(n)

nhưng đây là khuynh hướng:

  • Cũng làm tiêu cực N

Chờ đợi. Gì?

fibonacci(1)=fibonacci(0)+fibonacci(-1)

vì thế

fibonacci(-1)=1

fibonacci(-2)=fibonacci(0)-fibonacci(1)=-1

và v.v.

  • Đây là một để chương trình ngắn nhất tính bằng byte.
  • Bạn có thể gửi một chức năng hoặc một chương trình đầy đủ
  • N nằm trong [-100,100]

(Các) Testcase trong CSV:

-9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8
34;-21;13;-8;5;-3;2;-1;1;0;1;1;2;3;5;8;13;21

Dấu:

n <0 và n & 1 == 0:

fibonacci(n)=fibonacci(abs(n))*-1


Không. Tôi cũng muốn bạn hỗ trợ số âm.
Roman Gräf

7
Tôi nghĩ rằng đây không phải là một bản dupe. Trong số các câu trả lời trên trang đầu tiên của thử thách Fibonacci hiện tại, chỉ có 1 câu có thể xử lý các phủ định và tất cả các câu hỏi còn lại sẽ cần được thay đổi đáng kể để đi ngược lại.
xnor

Đã thêm một số. Cư thoải mai thêm vao nưa. @Flip
Roman Gräf

1
Đọc bài đăng meta này về định dạng các trường hợp kiểm tra: cố gắng tránh các bảng ưa thích
FlipTack

và bằng CSV, bạn có nghĩa là SSV (giá trị phân tách dấu chấm phẩy)?
NH.

Câu trả lời:


22

Toán học, 9 byte

Fibonacci

Có, hàm tích hợp này hỗ trợ các số âm.


2
Đây gần như là từ từng câu trả lời tôi sắp đăng: D
Greg Martin

17

Octave, 20 byte

 @(n)([1,1;1,0]^n)(2)

Hãy thử trực tuyến!

Giải trình

Điều này sử dụng thực tế là chuỗi Wikipedia f(n)có thể được viết là (đây phải là một ký hiệu vectơ ma trận):

Đệ quy:

[f(n+1)]  = [1  1] * [f(n)  ]
[f(n)  ]    [1  0]   [f(n-1)]

Rõ ràng:

[f(n+1)]  = [1  1] ^n * [1]
[f(n)  ]    [1  0]      [0]

Điều này có nghĩa là mục trên cùng bên phải của ma trận này với sức mạnh của nlà giá trị f(n)chúng ta đang tìm kiếm. Rõ ràng chúng ta cũng có thể đảo ngược ma trận này vì nó có thứ hạng đầy đủ và mối quan hệ vẫn mô tả mối quan hệ lặp lại tương tự. Điều đó có nghĩa là nó cũng hoạt động cho đầu vào tiêu cực.


1
(Làm thế nào) Điều này cũng làm việc cho đầu vào tiêu cực?
Roman Gräf

vâng, lời giải thích sắp tới ...
flawr

được ans(-6)có nghĩa là phải tích cực?
FlipTack

@FlipTack Xin lỗi, có thể là do sự thay đổi chỉ số. Tôi đã sử dụng dựa trên 1, trong khi câu hỏi sử dụng dựa trên 0, tôi đã sửa nó ngay bây giờ.
flawr

13

Tối đa, 3 byte

 fib

hỗ trợ số dương và số âm.

Dùng thử (dán) trên CESGA - Maxima trực tuyến


Bạn có thể thêm một liên kết đến ngôn ngữ?
Pavel

Tất nhiên đã thêm một liên kết đến một máy tính trực tuyến!
rahnema1

Cũng hoạt động trên WolframAlpha
Thunda

11

Python, 43 byte

g=5**.5/2+.5
lambda n:(g**n-(1-g)**n)/5**.5

Một công thức trực tiếp với tỷ lệ vàng g. Với fchức năng trên:

for n in range(-10,11):print f(n) 

-55.0
34.0
-21.0
13.0
-8.0
5.0
-3.0
2.0
-1.0
1.0
0.0
1.0
1.0
2.0
3.0
5.0
8.0
13.0
21.0
34.0
55.0

Cùng một chiều dài alt, chỉ răng cưa căn bậc hai của 5:

a=5**.5
lambda n:((a+1)**n-(1-a)**n)/a/2**n

Tôi đã không thấy một cách để tạo ra một hàm đệ quy có thể cạnh tranh với các hàm này. Một nỗ lực chơi gôn nhẹ cho 57 byte:

f=lambda n:n<0and(-1)**n*f(-n)or n>1and f(n-1)+f(n-2)or n

Để so sánh, một phương thức lặp (60 byte trong Python 2):

n=input()
a,b=0,1;exec"a,b=b,a+b;"*n+"a,b=b-a,a;"*-n
print a

Hoặc, với 58 byte:

n=input()
a,b=0,1;exec"a,b=b,a+cmp(n,0)*b;"*abs(n)
print a

10

JavaScript (ES6), 42 byte

f=n=>n<2?n<0?f(n+2)-f(n+1):n:f(n-2)+f(n-1)

Kiểm tra


Tôi thực sự thích chức năng của bạn. Tôi đã có một đề nghị ở đây, nhưng tôi đã bỏ qua một -, vì vậy nó sẽ không hoạt động ...
Luke

5

MATL , 11 9 byte

Tôi rất vui về điều này [3,2], chắc chắn có thể chơi gôn, nếu có ai biết cách xin vui lòng cho tôi biết =) (Nó cũng sẽ hoạt động với [1,3].) Cảm ơn @LuisMendo cho -2 byte =)

IHhBiY^2)

Điều này đang sử dụng cách tiếp cận tương tự như annswer Octave . Nhưng để tạo ra ma trận

[1,1]
[1,0]

chúng tôi chỉ conver số 32từ thập phân sang nhị phân (ví dụ 1110).

Hãy thử trực tuyến!


5

JavaScript (ES7) 37 byte

Sử dụng công thức của Binet .

n=>((1+(a=5**.5))**n-(1-a)**n)/a/2**n

Kết quả đầu ra này nthứ Fibonacci số + - 0.0000000000000005.


**yêu cầu ES7.
Neil

Ồ, nghĩ rằng đó là một phần của ES6, nhưng bạn đã đúng. Đã thay đổi nó. Tôi cũng đã sử dụng một phiên bản Công thức khác của Binet để tiết kiệm 1B.
Lu-ca

Bây giờ tôi nghĩ về nó, chỉ cần sử dụng 1-pthay vì -1/pnên làm việc cho cùng một khoản tiết kiệm.
Neil

3

Jolf, 2 byte

mL

Hãy thử nó ở đây!

Các nội dung được xây dựng, thực hiện bằng cách sử dụng phicông thức.


Uncaught SyntaxError: Mã thông báo bất ngờ | tại Hàm mới (<nặc danh>) tại p (math.min.js: 27) tại Object (math.min.js: 27) tại typed (eval at p (math.min.js: 27), <nặc danh>: 36:14) tại Object.n [as Factory] (math.min.js: 45) tại t (math.min.js: 27) tại f (math.min.js: 27) tại Object.get [dưới dạng trung vị ] (math.min.js: 27) tại clone (rawgit.com/ConorOBrien-Foxx/Jolf/master/src/jolf.js:902) tại rawgit.com/ConorOBrien-Foxx/Jolf/master/src/jolf. js: 2128 (Google Chrome mới nhất, phiên bản 55.0.2883.87m)
Ismael Miguel

@IsmaelMiguel Điều này chỉ nên hoạt động trên firefox
Conor O'Brien

Tôi không biết, nó không ở đâu cả
Ismael Miguel

2

Haskell, 51 byte

s=0:scanl(+)1s;f z|even z,z<0= -f(-z);f z=s!!abs z

1
Nhiều bài kiểm tra trong một người bảo vệ có thể được kết hợp với ,thay vì &&: even z,z<0.
nimi

1

PowerShell , 112 byte

function f($n){$o=('-','+')[$n-lt0];&(({$a,$b=(2,1|%{f("$n$o$_"|iex)});"$a- $o$b"|iex},{$n*$n})[$n-in(-1..1)])}

Cuộc gọi demo:

-9..9 | %{"{0,2}`t=> {1,3}" -f $_,(f($_))} 

Đầu ra của Demo:

-9  =>  34
-8  => -21
-7  =>  13
-6  =>  -8
-5  =>   5
-4  =>  -3
-3  =>   2
-2  =>  -1
-1  =>   1
 0  =>   0
 1  =>   1
 2  =>   1
 3  =>   2
 4  =>   3
 5  =>   5
 6  =>   8
 7  =>  13
 8  =>  21
 9  =>  34

1

Tiếng Litva , 88 byte

#N::((if(< N 2)((if(< N 0)((-(f(+ N 2))(f(+ N 1))))((+ N))))((+(f(- N 2))(f(- N 1))))))

Tôi nhìn vào tất cả những dấu ngoặc đơn .

Hãy thử trực tuyến!

Thực sự không nhỏ lắm. Hiện tại có một lỗi phân tích cú pháp yêu cầu một lỗi sử dụng (get N)hoặc (+ N)thay vì đơn giản N. Tôi chọn cái nhỏ hơn. Tuy nhiên tôi không nghĩ có bất cứ điều gì có thể được thực hiện hơn nữa để chơi golf này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.