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
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.