Това е въпрос за домашна работа, така че макар да искам използваем код, това, което наистина търся, е прозрение как да се справя с този проблем. Имам два сортирани масива във възходящ ред, които трябва да комбинирам в рекурсивна функция. Изглежда, че трябва да въведа частта за сортиране на алгоритъм за сортиране чрез сливане. Изискванията са рекурсивната функция да може да приема само двата сортирани низа като параметри и да не може да използва глобални или статични променливи.
Мисля, че псевдокодът е:
- ако размерът на двата низа == 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