Podstawy rekurencji - dwa programy do napisania

0

Witam, posiadam dwa programy do napisania rekurencyjnie:

  1. Wypisze n liczb naturalnych, z których pierwsze dwie wynoszą odpowiednio 1 i 2, a każda kolejna jest sumą dwóch poprzednich
  2. Wypisze n liczb naturalnych, z których pierwsze dwie wynoszą odpowiednio 10 i 20, a każda następna jest średnią arytmetyczną dwóch poprzednich.

Napisałem taki programik:

public class C3 {
    public static void main(String[] args){
        C3(3);
    }  
    public static double C3(int n){
        if (n==1) {
            System.out.println(10);
            return 10;
          }
        if (n==2) {
            C3(n-1);
            System.out.println(20);
            return 20; 
            
            }
        if (n>2) {
            C3(n-1);
            double x=(C3(n-1)+C3(n-2))/2;
            System.out.println(x);
            return x;
            }
        else return 0;
    }
}

lecz dla liczby 3 wypisuje mi

10
20
10
20
10
15.0

Wie ktoś może co tu jest nie tak?

2 pytanie:
E. Dla zadanej wartości naturalnej n wypisze następującą kwadratową tablicę liczb:

 n    n    n   ...  n
n-1 n-1 n-1 ... n-1
...   ...   ...  ... ...
2     2    2    2  2
1     1    1    1  1

Napisałem:

public class F2 {
    public static int x=8;
    public static void main(String[] args){
    F2(x);}
    
    public static void F2(int n){    
    if (n==1) {for(int i=0;i<x;i++) System.out.print(n+" ");}
    if (n>1) {{for(int i=0;i<x;i++)
        System.out.print(n+" ");}
        System.out.println();
        F2(n-1);
    }
    }
}

i mam pytanie, czy da sie jakoś wcisnąć to n w pętle for w funkcji żeby nie trzeba było tworzyć zmiennej x? Chodzi mi o takie cos ale to nie działa bo n sie zmienia

public class F2 {
    public static void main(String[] args){
    F2(4);}
    
    public static void F2(int n){    
    if (n==1) {for(int i=0;i<n;i++) System.out.print(n+" ");}
    if (n>1) {{for(int i=0;i<n;i++)
        System.out.print(n+" ");}
        System.out.println();
        F2(n-1);
    }
    }
}

dodanie znaczników <code> i <code class="java">, poprawienie tematu wątku oraz ustawienie tagów - fp

2

lecz dla liczby 3 wypisuje mi
10
20
10
20
10
15.0
Wie ktoś może co tu jest nie tak?

Funkcja licząca powinna tylko liczyć, nic nie wyświetlać.

public static double magic(int n)
{
 if (n == 1) 
  return 10; else

 if (n == 2)
  return 20; else

  return 0.5*(magic(n-1) + magic(n-2));
}

Potem to wywołujesz np.tak:

for (int i=0; i<10; i++)
 System.out.println("magic("+i+") = "+magic(i));

Btw:

            }
        else return 0;

Tego nie ma w treści polecenia.

0

też robilem za pomocą pętli ale myslałem że da sie to zrobić innym sposobem

0
cinek181992 napisał(a):

... myslałem że da sie to zrobić innym sposobem
Da się ale nie do zrozumienia przez początkującego.

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