Функция с использованием рекурсии - PullRequest
0 голосов
/ 07 апреля 2011

Я хочу сделать программу, которая находит, что времена, которые происходят целые числа массива, меньше или равны определенному числу.Я должен использовать рекурсию.Я думаю о возвращении 0, когда целое число больше, чем число, и 1 в противном случае.Наконец, я хочу найти способ добавить все эти результаты, снова вызвав функцию как рекурсию.Пожалуйста, помогите мне!

Нужно ли каждый раз сохранять возвращаемое значение ($ v0) в стеке?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

Просто пара мыслей:

  1. Обычно, по соглашению, значение 0 означает ложь; и любое другое значение означает истину. Просто, чтобы избежать путаницы, вы можете принять это соглашение в своем коде. Когда вы описываете свои мысли, кажется, что истина и ложь имеют противоположность полярности от обычной.

  2. Возможно улучшение, которое должно порадовать вашего инструктора: вместо возврата 0 или 1 в результате сравнения целых чисел, вы можете рассмотреть возможность возврата арифметической разности между двумя сравниваемыми целыми числами. Это даст вам не только равенство (т. Е. Разница == 0), но также некоторую дополнительную информацию о целочисленных членах массива без каких-либо повышенных затрат на сложность программы или время. Меня учили, что при прочих равных условиях, чем больше информации может вернуть функция, тем лучше.

  3. Что касается рекурсии: я не думаю , что вам нужно хранить все ($ v0) в стеке, если вы помните, чтобы накапливать каждый возвращенный ($ v0) в глобальная переменная где-то. Но на данный момент это только мое мнение, не глядя на проблему.

НТН. Я должен сказать, что это очень хорошее, маленькое, управляемое введение в рекурсию. Браво.

0 голосов
/ 07 апреля 2011

Да, в начале каждого вызова функции вы вызываете стек и сохраняете необходимые значения, а в конце функции (эпилог) вы должны сбросить стек на его позицию, иначе вы будете восстанавливать недопустимые переменные и данные из стека.

Мое предложение будет заключаться в том, чтобы при каждом вызове указывать адрес массива укусов и количество элементов в массиве и возвращать номер итерации (и непосредственно перед итерацией проверки рекурсивного вызова> количество массивов, и переходить к вашему эпилогу). ), а также общее количество вхождений.

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

...