Artur 130 wyśw. 09-07-2025 18:38

Praca domowa 3 zad 21

21. Napisz program, który wykorzystując rekurencję wyświetli na ekranie n pierwszych wyrazów
ciągu określonego w następujący sposób (liczbę n użytkownik przekazuje do programu w momencie
jego uruchomienia - nie powinna ona być zbyt duża):

Przykładowy wynik działania programu:
Liczba wyrazów do wyświetlenia: 5
5 pierwszych wyrazów ciągu:
2 4 8 10 20


// SPOSOB 1:

// public class MyClass 
// {
//     public static void main(String args[]) 
//     {
//         int n = Integer.parseInt(args[0]);
//         int wyraz = 0;
//         System.out.println("Liczba wyrazow do wyswietlenia: "+n);
//         System.out.println(n+" pierwszych wyrazow ciagu: ");
//         for(int i=1; i <= n; i++)
//         {
//             if(i==1)
//             {
//                 wyraz = 2;
//             }
//             else if(i!=1 && i%2==1)
//             {
//                 wyraz*=2;
//             }
//             else if(i%2==0)
//             {
//                 wyraz+=2;
//             }
//             System.out.print(wyraz+" ");
//         }
//     }
// }

//=============================================================================================================================

// SPOSOB 2:

public class MyClass 
{
    public static void main(String args[]) 
    {
        int a = Integer.parseInt(args[0]);
        System.out.println("Liczba wyrazów do wyświetlenia: " + a);
        System.out.println(a + " pierwszych wyrazów ciągu: ");
        wyraz(a);
    }
    static int wyraz(int n) 
    {
        int x;
        if (n == 1) 
        {
            x = 2;
            System.out.print(x + " ");
            return x;
        }
        else if (n%2 == 1) 
        {
            x = 2*wyraz(n-1);
            System.out.print(x + " ");
            return x;
        }
        else 
        {
            x = 2 + wyraz(n-1);
            System.out.print(x + " ");
            return x;
        }
    }
}


Do sposobu 1: Czy taki kod też jest ok? Chyba rekurencja nie musi działać zawsze poprzez inną metodę?

Do sposobu 2: Jak to jest, że w obrębie funkcji możemy wywołać ją samą? I czy dla funkcji typu void to też zadziała?

Po co pisać "return x;" skoro wyżej jest "System.out.print(x);" ?

Czy nie można napisać "return x;" na końcu metody poza pętlami? To nic nie zmienia w wyświetleniu


Programowanie Dodaj post do ulubionych Poproś o pomoc
s.gugula 11-07-2025 21:12

Sposób 1: no to raczej nie jest rekurencja, w rekurencji właśnie jednak chodzi o użycie danej metody przez samą siebie.

Sposób 2: To jest właśnie sedno rekurencji. Tak, też zadziała (najlepiej sprawdź sam ;)).

3 - to są dwie inne operacje. Pierwsza wypisuje wartość na ekran. A druga sprawia, że funkcja kończy swe działanie i do miejsca w kodzie, w którym została wykonana zwraca policzoną wartość x.

4 - poza ifami. Można.



Zadzwoń teraz Dotknij, aby się ze mną skontaktować.