61 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Even Fibonacci Numbers
							 | 
						||
| 
								 | 
							
								localeTitle: حتى أرقام فيبوناتشي
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								## المشكلة الثانية: حتى أرقام فيبوناتشي
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### طريقة:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								*   تسلسل فيبوناتشي هو تسلسل حيث `fib(n) = fib(n-1) + fib(n-1)` .
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								*   في هذا التحدي يتعين علينا جمع كل الأرقام الزوجية حتى الفصل `nth` في التسلسل.
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								*   مثال على `fiboEvenSum(10)` :
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								*   التسلسل حتى الفصل العاشر هو: 1 و 2 و 3 و 5 و 8 و 13 و 21 و 34 و 55 و 89 و 144
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								*   مجموع كل الأرقام الزوجية في التسلسل أعلاه هو: 2 + 8 + 34 + 144 = 188
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### حل:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### الحل الأساسي - تكراري:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `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; 
							 | 
						||
| 
								 | 
							
								 } 
							 | 
						||
| 
								 | 
							
								` 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#### حل متقدم - متكرر:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								 `// 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)
							 |