Wpis z mikrobloga

Musze te funkce:

int f(unsigned no, unsigned div) {

if (!no) return div;

if (!div) div=1;

if (no % 2)

return div + f(no/div, div*2);

else

return no % 10 + f(no/2, div);

}

zapisac w postaci iteracyjnej.

Czy tak bedzie ona wygladala:

int f(unsigned no, unsigned div)

{

int wynik=0;

if (!no) return div;

if (!div) div=1;

if (no % 2)

wynik= wynik + (div + f(no/div, div*2));

else

wynik= wynik + ( no % 10 + f(no/2, div));

return wynik;

}

?

#cpp #programownie
  • 10
  • Odpowiedz
  • 1
Dalej uzywasz rekurencji. Żeby było iteracyjnie potrzebujesz stosu, żeby trzymać wyniki pośrednie.
  • Odpowiedz
@erwit:

Trzeba dodać 2 zmienne, które będą zawierały wartości parametrów, które w wersji z rekurencją byłyby przekazywane do funkcji f (np. param1, param2), trzecią zmienną, która jest potrzebna do zapisywania tego co jest dodawane do wyniku (tmp) oraz lecieć w pętli tak długo jak warunek !param1 nie będzie spełniony, po czym zwracasz tmp+param2. Na początek przypisujesz im wartości:

param1 =
  • Odpowiedz
  • 0
Dodaj printy na początku funkcji żeby wyświetlić wartości no i div. Zobaczysz wtedy jak powinny wyglądać pośrednie wartości. Później takie same wartości mudza się znalezc na dodatkowej tablicy / stosie który przeglądasz iteracyjnie
  • Odpowiedz