<!--QuoteBegin-Guest+21:02:2005, 11:17 -->
<span class="vbquote">(Guest @ 21:02:2005, 11:17 )</span><!--QuoteEBegin-->У тебя вроде как какая-то ерунда написана, или я просто не понял подхода. it(М) - степень двойки, ближайшая к М. И что?
Я наверняка туплю, это должно делаться проще, но я бы с первого подхода сделал так (если надо без рекурсии):
Код:
int F(int M)
{
CStack<int> s;
s.Push(M);
DWORD dwCur = 0;
while (!s.IsEmpty())
{
int nTop = s.Pop();
if (nTop == 0)
continue;
if (nTop == 1)
{
dwCur++;
continue;
}
s.Push(nTop/2);
if (nTop & 1)
s.Push (nTop/2+1);
}
return dwCur;
}
Стек какой-нибудь сам напишешь. Но, имхо, без стека тут не обойтись. Можно еще последовательно считать F(0,1,...M), храня все результаты, но это памяти потребует много.[/quote]
Спасибо за помощь, то что я писал действительно чушь
Я просто хотел вычилить кол-во итераций необходимое для вычисления функции, а затем в цикле вызывать функцию.