2015-11-05 3 views
-1

Я пытаюсь использовать рекурсию, чтобы найти максимальное значение в массиве в JavaScript. Я создал функцию, но не могу понять, как это сделать рекурсивно.Поиск максимального значения в массиве рекурсивно

function Max(a) { 
    var a = [2,3,5]; 
    return Math.max.apply(Math, a); 
} 
+4

Рекурсия - это функция, вызывающая себя. Если функция передается массив значений, что вы хотите передать во внутренний вызов функции? –

+1

Подсказка: max (a, b, c) = max (max (a, b), c). – mpen

+0

http://stackoverflow.com/questions/1379553/how-might-i-find-the-largest-number-contained-in-a-javascript-array –

ответ

0

Вот пример рекурсивной функции, которая принимает массив чисел и сравнивает первые два, удаляет меньшее, а затем снова называет себя на данном массиве минус снятого числе.

function max(numArray) 
{ 
    // copy the given array 
    nums = numArray.slice(); 

    // base case: if we're at the last number, return it 
    if (nums.length == 1) { return nums[0]; } 

    // check the first two numbers in the array and remove the lesser 
    if (nums[0] < nums[1]) { nums.splice(0,1); } 
    else { nums.splice(1,1); } 

    // with one less number in the array, call the same function 
    return max(nums); 
} 

Вот jsfiddle: https://jsfiddle.net/t3q5sm1g/1/

+0

Это сломается для '[1,2,2,3]' (или любого массива с двумя соседними значениями, равными друг другу) –

+0

woah yeah обновлен для обработки этого случая – thanksd

+0

Это разрушает исходный массив, так что единственное оставшееся значение самый большой. – RobG

0
function max(array) { 
    if (array.length === 0) { // Step1: set up your base case 
     return array[0] 
} else { 
    return Math.max(array.shift(), max(array); // Step2: rec case 
} 
} 

Каждый раз, когда рекурсивный случай называется она получает его ближе к базовому случаю.

Math.max принимает два числа, затем сравнивает их, а затем возвращает высший из двух.

Каждый раз, когда вы вызываете array.shift(), вы выбиваете первый элемент массива из массива, поэтому второй аргумент в рекурсивном вызове - это массив, сокращенный на единицу.

Когда array.length имеет только один элемент, верните этот элемент и посмотрите, как стек разворачивается.

Смежные вопросы