Екілік қайталану тізбегі

Екілік қайталану реті келесі пішіннің рекурсивті анықталған реті болып табылады:

binary recurrence sequence definition

Бұл Fibonacci ( x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1 ) дәйектілігі және Lucas ( x = 1 , y = 2, a = [2, 1], альфа = 1, бета = 1 ) тізбегі.

Қоңырау

n , y , a , alpha бета кез келген ақылға қонымды пішімде n тиісті екілік қайталану ретішінің терминін шығарады.

Ережелер

  • You may choose for the sequence to be either 1-indexed or 0-indexed, but your choice must be consistent across all inputs, and you must make note of your choice in your answer.
  • You may assume that no invalid inputs would be given (such as a sequence that terminates prior to n, or a sequence that references undefined terms, like F(-1) or F(k) where k > n). As a result of this, x and y will always be positive.
  • The inputs and outputs will always be integers, within the boundaries of your language's natural integer type. If your language has unbounded integers, the inputs and outputs will be within the range [2**31, 2**31-1] (i.e. the range for a 32-bit signed two's complement integer).
  • a will always contain exactly y values (as per the definition).

Сынақ жағдайлары

Note: all Сынақ жағдайлары are 0-indexed.

x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1, n = 6 => 13
x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1, n = 8 => 47
x = 3, y = 5, a = [2, 3, 5, 7, 11], alpha = 2, beta = 3, n = 8 => 53
x = 1, y = 3, a = [-5, 2, 3], alpha = 1, beta = 2, n = 10 => -67
x = 5, y = 7, a = [-5, 2, 3, -7, -8, 1, -9], alpha = -10, beta = -7, n = 10 => 39
10
Қайтарылған тәртіпте a қабылдайтын ба?
қосылды автор Dennis, көзі
Жақсы, нақтылау үшін рахмет.
қосылды автор Dennis, көзі
@Dennis Иә, бұл істейді.
қосылды автор Mego, көзі

6 жауаптар

JavaScript (ES6), 51 44 байт

(x,y,z,a,b)=>g=n=>n

Функцияның ішінара қарама-қарсы екенін ескеріңіз, мысалы: f (1,2, [1,1], 1,1) (8) 34 қайтарады. Аралық функцияларды бір-бірінен тәуелсіз етіп жасау үшін 2 байтқа (қазіргі уақытта тек соңғы құрылған функция дұрыс жұмыс істейді).

Өңдеу: @Mego-дің арқасында берілген бита әрдайым нәтиженің бірінші y элементтерін қамтығанын ескермегендіктен, 7 байт сақталды.

2
қосылды
@Mego Мен білемін, сұрақтар мен жауаптар жиі ескермеймін, бірақ бұл мені әсіресе нәзік болды.
қосылды автор Luke Bennett, көзі

Jelly, 11 bytes

⁴Cịæ.⁵ṭµ¡⁶ị

Try it online!  1  |  2  |  3  |  4  |  5 

Бұл қалай жұмыс істейді

⁴Cịæ.⁵ṭµ¡⁶ị  Main link. Arguments: a; [x, y]; [α, β]; n (1-based)

       µ     Combine the links to the left into a chain.
        ¡    Execute that chain n times, updating a after each execution.
⁴              Yield [x, y].
 C             Complement; yield [1 - x, 1 - y].
  ị            Retrieve the elements of a at those indices.
               Indexing is 1-based and modular in Jelly, so this retrieves
               [a[-x], a[-y]] (Python syntax).
     ⁵         Yield [α, β].
   æ.          Take the dot product of [a[-x], a[-y]] and [α, β].
         ⁶   Yield n.
          ị  Retrieve the element of a at index n.
2
қосылды

Python 2, 59 байт

x,y,A,a,b,n=input()
exec'A+=a*A[-x]+b*A[-y],;'*n
print A[n]

Ideone сайтында тексеріңіз.

2
қосылды

Python 2, 62 байт

x,y,l,a,b=input();f=lambda n:l[n]if n

Тікелей рекурсивті шешім. Барлық кірістер STDIN-ден алынады, ал n функциясы дәлел ретінде бөлінеді, ол рұқсат етілген әдепкі бойынша (мазмұнды болса да).

l [n] кодының орнына if/else орнына және/немесе байттарын сақтаудың бір жолы жоқ сияқты falsey ретінде 0.

2
қосылды

Haskell, 54 48 байт

[email protected](x,y,a,p,q)%n|n<-(n-)=p*l%k x+q*l%k y
2
қосылды

J, 43 байт

{:{](],(2>@{[)+/ .*]{[email protected]>@{[)^:(3>@{[)>@{.

A терминдерінің бастапқы реті ескеріле отырып, x , y параметрлерін пайдаланып, келесі n α және β . Содан кейін, ол n th терминін кеңейтілген ретпен таңдайды және нәтиже ретінде шығарады.

Пайдалану

J тек 1 немесе 2 дәлелді қолдайтындықтан, мен барлық параметрлерді қораптағы тізімдердің тізімі ретінде топтастырамын. Алдымен A бастапқы тұқымдық мәндер тізімнен кейін x және y параметрлерімен, содан кейін α және β тізім ретінде және n мәнімен аяқталады.

   f =: {:{](],(2>@{[)+/ .*]{[email protected]>@{[)^:(3>@{[)>@{.
   2 3 5 7 11;3 5;2 3;8
┌──────────┬───┬───┬─┐
│2 3 5 7 11│3 5│2 3│8│
└──────────┴───┴───┴─┘
   f 2 3 5 7 11;3 5;2 3;8
53
   f _5 2 3 _7 _8 1 _9;5 7;_10 _7;10
39
0
қосылды