too few arguments to function

0

Pomocy, wyskakuje mi taki komunikat: too few arguments to function
jak to poprawić ?

#include <iostream>

using namespace std;

long long c_n(long n,long p) {
    if(n==0) {
        return p;
    } else if(n%2==0) {
        return c_n(n-1)/2;
    } else {
        return c_n(n-1)*3+1;
    }
}

int main() {
    cout << c_n(0) << endl;
    cout << c_n(1) << endl;
    cout << c_n(2) << endl;
    cout << c_n(15) << endl;
    cout << c_n(500) << endl;
    cout << c_n(1000000) << endl;
}

Polecenie w załączniku

1
lololo789 napisał(a):

Pomocy, wyskakuje mi taki komunikat: too few arguments to function

A znasz na tyle angielski by zrozumieć co znaczy "too few arguments to function"?

Funkcja jest zdefiniowana dla 2 argumentów, a ty podajesz 1, więc słusznie ci wyskakuje.

0

wiem co to znaczy, ale nie wiem jak to porawić

0

a jaki jest 1 argument, a jaki 2 ?

0
long long c_n(long n,long p) {
    if(n==0) {
        return p;
    } else if(n%2==0) {
        return c_n((n-1)/2, p);
    } else {
        return c_n((n-1)*3+1, p);
    }

tak ?

0

Masz swoją funkcję " c_n(argument 1, argument 2)", natomiast przy wywoływaniu, czyli:

cout << c_n(0) << endl;

Podajesz tylko jeden z nich.

0

Masz funkcję, która przyjmuje dwa argumenty, podczas gdy Ty przekazujesz jeden - czego tu nie rozumiesz?

To tak, jak gdybyś poprosił kolegę o podanie dwóch liczb, po czym on mówi jedną i jest zadowolony, że spełnił polecenie.

0

moglibyscie juz dawno napisac to, nic nie pomagacie

1

Hej, sluchaj - ile masz lat? Jesli 12 to przepraszam i nawet propsuje, ze sie uczysz juz. Jesli wiecej... To chyba sie nie nadajesz na programiste :/

1

Wytłumacz proszę, czego nie rozumiesz w tym, że kolega (funkcja) prosi Cię o podanie dwóch liczb, a Ty mówisz mu jedną.

Taki zapis:

long long c_n(long n,long p)

Oznacza, że deklarujesz (w tamtym kontekście również od razu definiujesz) funkcję c_n, która przyjmuje dwie liczby, kolejno: n oraz p.

Natomiast w tym momencie:

cout << c_n(0) << endl;

Wywołujesz Twoją funkcję c_n z jedną liczbą (tutaj zerem), nie podając żadnej wartości dla drugiego parametru.

0
#include <iostream>

using namespace std;

long long c_n(long n,long p) {
    if(n==0) {
        return p;
    } else if(n%2==0) {
        return c_n((n-1)/2, p);
    } else {
        return c_n(3*(n-1)+1, p);
    }
}

int main() {
    cout << c_n(0,1) << endl;
    cout << c_n(1,5) << endl;
    cout << c_n(2,4) << endl;
    cout << c_n(15,45) << endl;
    cout << c_n(500,2500) << endl;
    cout << c_n(10000,500000) << endl;
}
0

No widzisz - i teraz masz poprawnie.

0

Na temat odpowiadaj w postach.

Prawdopodobnie masz stack overflow - zacznij od wywalenia wszystkich wywołań c_n, pozostawiając tylko jedno.

0

patrz załącznik'

0

Druga linia w main ( c_n(1, 5)...) powoduje, tak jak napisał Patryk, Stack Overflow dlatego, że cały czas wykonuje się ta część c_n:

else 
{
	return c_n(3 * (n - 1) + 1, p);
}
0
Patryk27 napisał(a):

Na temat odpowiadaj w postach.

Prawdopodobnie masz stack overflow - zacznij od wywalenia wszystkich wywołań c_n, pozostawiając tylko jedno.

Wcale nie ma poprawnie. Pisałem już o tym wcześniej. Zamiast pomnożyć 3*c_n(n-1,p)+1, to robi c_n(3*(n-1)+1,p). Funkcja nie zbiegnie się rekurencyjnie do c_n(0,p).

Na marginesie, jakby to kogoś interesowało, ten ciąg to służy do przedstawienia problemu Collatza czyli najprostszego, niemożliwego do udowodnienia problemu matematycznego na świecie. Generalnie chodzi o to, że jakąkolwiek liczbę naturalną p się nie poda, to ciąg c_n zbiegnie się do postaci: 4, 2, 1 i dalej będzie się tak powtarzać w nieskończoność.

0

To pytanie wygląda nieco jak problem xy (pomijając, że samo pytanie o błąd kompilacji jest ok).
Problem właściwy wygląda na problem Collatza lub jakąś jego mutację.

W każdym razie zaprezentowana rekurencja jest absurdalna i zbędna, iteracyjne podejście załatwia sprawę.

1

podpowiedź:

int nextValueOfCollatzConjecture(int c)
{
     if ((c % 2) == 0)
          return c / 2;
     return 3 * c + 1;
}

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