63 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Even Fibonacci Numbers | |||
|  | localeTitle: Даже номера Фибоначчи | |||
|  | --- | |||
|  | ## Проблема 2: Даже числа Фибоначчи
 | |||
|  | 
 | |||
|  | ### Метод:
 | |||
|  | 
 | |||
|  | *   Последовательность фибоначчи представляет собой последовательность, где `fib(n) = fib(n-1) + fib(n-1)` . | |||
|  |      | |||
|  | *   В этой задаче мы должны суммировать все четные числа до `nth` члена в последовательности. | |||
|  |      | |||
|  | *   Пример для `fiboEvenSum(10)` : | |||
|  |      | |||
|  | *   Последовательность до 10-го срока: 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 | |||
|  |      | |||
|  | *   Сумма всех четных чисел в приведенной выше последовательности: 2 + 8 + 34 + 144 = 188 | |||
|  |      | |||
|  | 
 | |||
|  | ### Решение:
 | |||
|  | 
 | |||
|  | #### Основное решение - Итеративный:
 | |||
|  | 
 | |||
|  | ```js | |||
|  | function fiboEvenSum(n) {  | |||
|  |   let first = 1, second = 2, sum = 2, fibNum; // declaring and initializing variables  | |||
|  |   if (n <= 1) return sum; // edge case  | |||
|  |   for (let i = 2; i <= n; i++){  // looping till n  | |||
|  |     fibNum = first + second;    // getting the ith fibonacci number  | |||
|  |     first = second;  | |||
|  |     second = fibNum;  | |||
|  |     if (fibNum%2 == 0) sum+=fibNum;  // If even add to the sum variable  | |||
|  |   }  | |||
|  |   return sum;  | |||
|  |  }  | |||
|  | ``` | |||
|  | 
 | |||
|  | #### Расширенное решение - Рекурсивное:
 | |||
|  | 
 | |||
|  | ```js | |||
|  | // We use memoization technique to save ith fibonacci number to the fib array  | |||
|  |  function fiboEvenSum(n){  | |||
|  |   const fib = [1, 2];  | |||
|  |   let sumEven = fib[1];  | |||
|  |   function fibonacci(n){  | |||
|  |     if (n <= 1) return fib[n]; // base condition  | |||
|  |     else if (fib[n]) return fib[n]; // if the number exists in the array we cache it and return  | |||
|  |     else {  | |||
|  |       fib[n] = fibonacci(n-1) + fibonacci(n-2); // otherwise calculcate and save it to the array  | |||
|  |       if (fib[n]%2 == 0) sumEven+=fib[n];  //if the number is even, add it to the sumEven variable  | |||
|  |       return fib[n];  | |||
|  |     }  | |||
|  |   }  | |||
|  |   fibonacci(n); // run the recursive function  | |||
|  |   return sumEven;  | |||
|  |  }  | |||
|  | ``` | |||
|  | 
 | |||
|  | *   [Код запуска](https://repl.it/@ezioda004/Project-Euler-Problem-2-Even-Fibonacci-Numbers) | |||
|  | 
 | |||
|  | ### Рекомендации:
 | |||
|  | 
 | |||
|  | *   [Википедия](https://en.wikipedia.org/wiki/Fibonacci_number) |