다음으로 피보나치의 큰형인 트리보나치 수열을 소개하겠습니다.
이름에서 알 수 있듯이 피보나치 수열법과 매우 유사하지만 차이점이 있습니다.
이 시퀀스를 [1,1,1]로 시작하면 다음과 같은 결과를 얻게 됩니다:
[1,1,1,3,5,9,17,31,...]
보시다시피 4항 3은 1항, 2항, 3항의 합이고, 5항 5는 2항, 3, 4항의 합이 되는 식입니다...
시작하면 어떨까요? [0,0,1]을 포함하는 이 시퀀스에서는 어떤 결과를 얻게 될까요?
[0,0,1,1,2,4,7,13,24,...]
이 예를 읽고 나면 아마도 규칙을 추측했을 것입니다. 첫 번째로 사용된 처음 세 개를 제외하고 일련번호의 경우, 이후의 각 숫자는 그 앞의 가장 가까운 세 숫자의 합과 같습니다.
피보나치 수열을 비교하면 규칙은 다음과 같습니다. 초기 수열로 사용된 처음 두 숫자를 제외하고 모든 후속 숫자는 그 앞의 가장 가까운 두 숫자의 합과 같습니다.
이제 제가 왜 형제라고 했는지 아시겠어요?
심지어 이 규칙에 따르면 엑스보나치 수열로도 확장이 가능하지만, 이번 주제에서는 트리보나치 수열에 대해서만 이야기하겠습니다.
자, 트리보나치 수열을 구성하는 방법을 어떻게 구현하는지 생각해 봅시다!
두 개의 매개변수를 받습니다. 첫 번째 매개변수는 초기화 시퀀스이며 배열입니다. 두 번째 매개변수는 생성할 시퀀스 항목 수를 나타내는 숫자입니다.
반환 값은 당연히 새 항목을 생성한 후의 시퀀스 배열입니다.
이 문제는 두 가지 상황을 구별해야 합니다.
먼저, 이 초기화 시퀀스의 크기가 3인데 항목을 2개만 생성하면 어떻게 해야 합니까? 대답은 간단합니다. 초기화 배열에서 처음 2개 항목을 가로채기만 하면 됩니다.
두 번째 경우에는 초기화 시퀀스 이외의 항목을 생성해야 하는 경우도 매우 간단합니다. 피보나치 수열을 생성하는 것과 마찬가지로 이전 항목을 추가하여 구성됩니다. 세 가지 최신 항목 등.
function tribonacci(signature,n){ var startPoint = 0; if(n < signature.length){ return signature.slice(0,n); } for(var i=startPoint+signature.length;i<n;i++){ signature[i] = signature[startPoint] + signature[startPoint+1] + signature[startPoint+2]; startPoint++; } return signature; }
위 내용은 JavaScript 흥미로운 질문: Tribonacci 시퀀스의 내용입니다. 더 많은 관련 내용을 보려면 PHP 중국어 웹사이트(www.php.cn)를 주목하세요!