PowerShell v2 +, 85 79 69 byte
param($n)$b=1,1;2..$n|%{$b+=$b[$_-$b[$_-1]]+$b[$_-$b[$_-2]]};$b[$n-1]
Lấy đầu vào $n
, đặt $b
thành một mảng @(1, 1)
, sau đó nhập một vòng lặp từ 2 .. $n
. Mỗi lần lặp chúng ta $b
xử lý phép tính mới nhất trong chuỗi với một +=
định nghĩa đơn giản và định nghĩa của chuỗi. Sau đó, chúng tôi xuất số thích hợp từ $b
(với một -1
vì các mảng trong PowerShell không được lập chỉ mục). Công trình này nếu $n
được 1
hoặc 2
vì cả hai trong những giá trị được trước được điền vào các chỉ số thấp hơn $b
từ khi bắt đầu, vì vậy ngay cả khi đinh vòng lặp trên rác, nó bỏ qua anyway.
Giải pháp đệ quy 78 76 byte
$a={param($k)if($k-lt3){1}else{(&$a($k-(&$a($k-1))))+(&$a($k-(&$a($k-2))))}}
Lần đầu tiên tôi đã sử dụng tương đương với lambda làm câu trả lời, vì thông thường, một giải pháp lặp lại ngắn hơn (như bạn có thể thấy từ tất cả các parens lồng nhau). Nhưng, trong trường hợp này, các parens lồng nhau gần như được nhân đôi trong giải pháp lặp với các lệnh gọi mảng lồng nhau, vì vậy giải pháp đệ quy ngắn hơn. Không, giải pháp lặp lại thực sự ngắn hơn (xem ở trên).
Gọi nó thông qua toán tử thực thi, như &$a 20
. Chỉ cần một cuộc gọi đệ quy thẳng lên.