Это вопрос домашнего задания, поэтому, хотя мне нужен пригодный для использования код, я действительно ищу понимание того, как решить эту проблему. У меня есть два отсортированных массива в порядке возрастания, которые мне нужно объединить в рекурсивной функции. Кажется, мне нужно установить сортирующую часть алгоритма сортировки слиянием. Требования заключаются в том, что рекурсивная функция может принимать только две отсортированные строки в качестве параметров и не может использовать глобальные или статические переменные.
Я думаю, что псевдокод:
- если размер двух строк == 0, то вернуть результирующую строку.
- сравните substr(0,1) каждой строки, чтобы увидеть, какая из них меньше, и добавьте ее в результирующую строку.
- рекурсивно вызвать функцию с новыми параметрами, представляющими собой подстроку строки, к которой добавлен
Мои вопросы: как сохранить строку результата, если я не могу использовать статические переменные? Я видел код, в котором строка определяется как = оператору возврата рекурсивного вызова. Будет ли это работать в этом случае?
Второй вопрос заключается в том, как увеличить функцию. Мне нужно вызвать substr(1,size-1) после первой итерации, а затем увеличить ее без использования статических переменных.
Вот моя попытка решить уравнение СО статическими переменными (которые не разрешены):
static string result="";
static int vv=0;
static int ww=0;
if(v.size()==0 && w.size()==0)
return result;
if(w.size()==0 || v.substr(0,1) <= w.substr(0,1)){
result+=v.substr(0,1);
vv++;
return spliceSortedStrings( v.substr(vv,v.size()-vv) , w);
}
else if(v.size()==0 || w.substr(0,1) > v.substr(0,1)){
result+=w.substr(0,1);
ww++;
return spliceSortedStrings( v , w.substr(ww,w.size()-ww));
}
Я буду признателен за любое руководство.
substr()
— это безумие, когда все, что вам нужно, этоfront()
(при условии, что!empty()
проверено).substr()
дорого, так как каждый из них генерирует новую выделенную независимую строку. - person WhozCraig   schedule 04.02.2014