Przedstawienie liczby w postaci sumy potęg dwójki

0

Hej, próbuje napisać funkcję, która rekurencyjnie będzie zliczała ile potęg dwójki potrzeba do przedstawienia podanej liczby, tzn. np.: 13=2^3+2^2+2^0, czyli odpowiedź powinna być 3. inny przykład: 61=2^5+2^4+2^3+2^2+2^0 odp: 5

i zacząłem od czegoś takiego:

#include<iostream>
#include<cmath>
using namespace std;

int liczba(int k, int n) {
	
	
	if (k == 0) return 1; //warunek przerwania funkcji

	return liczba(???)-liczba(???); 
}

int main() {
	int k;
	int n;
	
	cin >> n;
	cout << liczba(n, k) << endl;

	system("pause");
	return 0;

}

i idee mam taką, żeby od podanej liczby n szukać największej ale mniejszej od n potęgi liczby 2 i odejmować od niej tę potęgę (gdzie k jest wykładnikiem).
niestety nawet nie potrafię zacząć tego pisać i liczę na waszą pomoc.

3

Rekurencja jest tutaj dziwnym pomysłem, ale oczywiście realizowalnym.

Podpowiedź jest taka, że szukana przez Ciebie wartość to liczba jedynek w zapisie binarnym. A stąd już łatwo odgadnąć, że rekurencyjnie jest to F(n) = n%2 + F(n/2).

1

Jeszcze warunek stopu:

int  F(int n)
	{ 	
	if (n == 0)
		return 0;
	return  n%2 + F(n/2);
	}
0

Dziękuje bardzo za pomoc, przeanalizowałem wszystko i rozumiem. Nie wiem tylko czemu zawsze szukam skomplikowanych rozwiązań, kiedy one tak naprawdę są takie proste. no cóż... :D
Dziękuje jeszcze raz. :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.