Liczba "n" jako suma kwadratów "k" liczb naturalnych

0

Mam do napisania funkcję, która za argumenty przyjmuje liczbę n oraz k. Funkcja musi sprawdzać czy liczbę n można zapisać w postaci sumy kwadratów k liczb naturalnych ( liczby mogą się powtarzać ).

Jak napisać taką funkcję za pomocą przeszukiwania z nawrotami ?

0

A z czym konkretnie masz problem?

0

Nie wiem jak wykorzystać do tego metodę nawrotów

0

Możesz jaśniej? Bo to dla mnie twoja odpowiedź brzmi jak: - "nie wiem jak do obliczenia 2+2 wykorzystać dodawanie"

0

Nie rozumiem w jakiej kolejności dodawać do siebie liczby i w którym momencie robić w tej sytuacji nawrót.

0

W każdym zagłębieniu rekurencji dodajesz jedną liczbę (masz tam odpowiednią pętlę od 1 do sqrt(n)). Robisz tak dopóki masz co dodawać (tzn dopóki aktualna suma jest mniejsza od liczby N). Jeśli gdzieś dojdziesz do sytuacji kiedy twoja aktualna suma == N to znaczy że odpowiedź brzmi 'tak'. Jeśli dojdziesz do sytuacji że nie możesz nic sensownego dodać do sumy to wracasz z danego zagłębienia rekurencyjnego i na poziomie wyższym robisz kolejny obrót pętli i zaczynasz zabawę od nowa.

0

A czy da się napisać wersję iteracyjną ?

0

Owszem, da się. Zaś zacznij od napisania wersji rekurencyjnej.
Iteracyjna będzie polegała na tym że zachowujesz poprzednie wartości w jakimś stosie.

0

Nie do końca chyba nadal rozumiem. Może ktoś mi napisac jak taki proces będzie wyglądał np. dla n = 9 i k = 3 ?

0

Czy potrafisz napisać funkcję + jedną pętle + jeden if + plus dwa return?
Jeżeli nie to weź przeczytaj jakiś kurs, jeżeli tak to proszę zadawać konkretne pytania.

2

Odrzucam na chwile 1 bo za dużo by było pisania :P Zakładam że bierzemy pod uwagę kwadraty liczb > 1

funkcja(9, 3)

  • skladnik = 22 = 4, funkcja(9-4, 2)
    • skladnik = 22 = 4, funkcja(5-4, 1)
      • brakuje nam 1 do sumy wiec nic nie możemy dodać, wracamy w górę
    • skladnik = 32 = 9, funkcja(5-9, 1)
      • wyszła nam ujemna suma więc nic z tego, wracamy w górę
    • na tym poziomie już nic nie zrobimy bo testujemy tylko skladniki 1..sqrt(n) więc wracamy w górę
  • skladnik = 32 = 9, funkcja(9-9, 2)
    • suma się wyzerowała więc znaleźliśmy rozwiązanie, wracamy w górę zwracając true
  • mamy zwrotkę z true więc zwracamy to wyżej
    wyszło nam że da się to zrobić

0 użytkowników online, w tym zalogowanych: 0, gości: 0