Rekurencja w funkcji

0
#include<iostream>
using namespace std;
int liczba, wynik = 1;

int obliczanie(int wynik)
{

    if (liczba == 0)
        return 1;
    else return wynik * obliczanie(wynik-1);

}

int main(){
    cout << "Podaj liczbe: ";
    cin >> liczba;
    cout << liczba << "! = ";
    cout << obliczanie(wynik);

    return 0;
}

kompiluje ale potem wywala błąd, ktoś cos?

0

Masz tam 2 zmienne: liczba i wynik i używasz ich tak jakby to było to samo. Sprawdzasz jedno, drugie przekazujesz.

0

czyli w 5 linijce kodu powinno być int obliczanie(int liczba) ?

0

Tak, wszędzie ma być jedna zmienna, albo liczba, albo wynik, czyli najlepiej zamienić if (liczba == 0) na if (wynik == 0). Poza tym uważam, że rekurencyjna silnia to rak.

2

Może inaczej - co planujesz obliczyć? Bo ten kod średnio ma sens

1

Powinno być z głową.
Jak masz funkcje, przekazujesz wynik, wołasz funkcję z wynik to sprawdzaj też czy wynik jest równy zero. Jak w main wczytujesz liczba i pewnie chcesz liczyć dla liczba to przekazuj do funkcji liczba.

0

Napisz funkcję, która wyznacza wartość n! (n jest liczba naturalną). Funkcja ma
wykorzystywać rekurencję.
to jest treść zadania.
czyli jak dobrze zrozumiałem błędem w tym zadaniu były zmienne w funkcji w tym miejscu > int obliczanie(int wynik)
{

if (liczba == 0)
    return 1;
else return wynik * obliczanie(wynik-1);

}

i zamiast if (liczba ==0) powinno być if(wynik==0) tak? czy źle zrozumiałem

0

nie smiga :(

1

Jakbyś linię int liczba, wynik = 1; miał w main a nie globalnie to miałbyś błąd kompilacji i pewnie szybciej byś zauważył że napisałeś nie to co chcesz. Ogólnie zmienne globalne to zło i najlepiej ich nie używać

3

wywal te zmienne globalen i Używaj tego normalnie:

int badFactorial(int n) {
    if (n == 0) return 1;
    else return n * badFactorial(n - 1);
}
int main(){
    int num;
    std::cin >> num;
    std::cout<< badFactorial(num);
    std::cout << "\n";
    return 0;
}

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