2017-02-17 3 views
-1

Я занимаюсь рекурсией, пытаясь получить с ней больше удовольствия, но эта проблема продолжает прослушивать меня.
Я должен написать рекурсивную программу, которая троирует каждый элемент массива. Сначала это казалось достаточно простым.Тройка каждого элемента массива с рекурсией

public static void triple (int[] a, int index) { 
    if (index < a.length()) { 
     a[index]*=3; 
     triple(a, index + 1); 
    } 
} 

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

Как я могу решить это?

+1

Думаю, они намереваются написать вспомогательный метод и называть это методом однопараметров. –

+1

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

+0

Miam turkey;) В любом случае вы всегда можете вернуть индекс вместо передачи его в качестве параметра. – JFPicard

ответ

1

Эта проблема не является лучшей проблемой для рекурсии.

Оставьте метод как есть (замените length() только length).
перегрузки его с другим методом:

public static void triple(int[] a) { 
    triple(a, 0); 
} 

Тогда в вашем коде вы можете пойти:

int[] t = {1, 2, 3}; 
triple(t); 
0

Проблема в том: эта проблема не может быть на самом деле решается с помощью рекурсии - при условии, что вы только может передать массив самостоятельно.

Дело в том, что вам нужно как-то узнать, какие индексы были утроены; и что нет.

Другими словами: вы как-то должны обманывать; вам нужно было бы сохранить какую-то вспомогательную переменную где-нибудь, рассказывающую о последнем обработанном индексе; или что-то подобное.

Но, как сказано; это означало бы реализовать решение ... которое может работать только путем «массирования» требований.

Значение: если вы действительно ограничиваете себя один метод, который принимает только массив в качестве аргумента, тогда вы не можете решить эту головоломку!

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