Największa wartość funkcji - kilka rzeczy podkreśla w edytorze na czerwono

Największa wartość funkcji - kilka rzeczy podkreśla w edytorze na czerwono
  • Rejestracja: dni
  • Ostatnio: dni
0

Próbowałem jakoś skleić zadanie, ale podkreślone na czerwono mam rzeczy i szczerze mówiać nie wiem jak to dalej ruszyć.

Jaka jest wartość następującej funkcji rekurencyjnej dla danego całkowitego argumentu n?

integer procedure K(n)
if n<0 then K ← K(-n)
else if n=0 then K ← 0
else K ← K(n-1)+2*n-1

Kopiuj
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            int K;
            if (n < 0)
            {
                // nie mam pojęcia jak zrobić
                Console.WriteLine(K);
            }
            else if (n == 0)
            {
                K = 0;
                Console.WriteLine(K);

            }
               else
            {
                K = K(n - 1) + 2 * n - 1;
                n++;
                Console.WriteLine(K);
            }

            }
        }
    }
Maciej Cąderek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1264
0

Ło matko, wiesz w ogole co to jest funkcja / metoda? Wiesz co to jest rekurencja?

Co to Twoim zdaniem robi?

Kopiuj
int n;
int K;
K = K(n - 1);

No i po co Ci ify, jak n ma u Ciebie stałą wartość równą 0 nie jest nigdzie zainicjalizowana??

  • Rejestracja: dni
  • Ostatnio: dni
0

Nie mam zielonego pojęcia szczerze mówiac, nie robiłem jeszcze żadnego zadania matematycznego.

xfin
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Genewa
  • Postów: 597
0
Pijany Orzeł napisał(a):

Nie mam zielonego pojęcia szczerze mówiac, nie robiłem jeszcze żadnego zadania matematycznego.

Ale to nawet o matematykę nie chodzi, tylko o podstawy programowania i OOP.

SO
  • Rejestracja: dni
  • Ostatnio: dni
1
Maciej Cąderek napisał(a):

No i po co Ci ify, jak n ma u Ciebie stałą wartość równą 0??

Nie ma wartości 0.
Zmienne lokalne w C# nie są automatycznie inicjalizowane i taki kod się po prostu nie skompiluje.

  • Rejestracja: dni
  • Ostatnio: dni
0
xfin napisał(a):
Pijany Orzeł napisał(a):

Nie mam zielonego pojęcia szczerze mówiac, nie robiłem jeszcze żadnego zadania matematycznego.

Ale to nawet o matematykę nie chodzi, tylko o podstawy programowania i OOP.

Z programowania jak na razie zrobiłem tylko parę tutoriali z yt, zaczynam z c#, a to jest zadanie z algorytmów i nie wiem jak to ruszyć.
Mógłby ktoś napisać jak to powinno wyglądać bym mógł zrozumieć i samemu napisać?

Maciej Cąderek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1264
0

Mogę Ci wytłumaczyć treść zadania jak nie rozumiesz zapisu:

integer procedure K(n) - utwórz funkcję (metodę) o nazwie K przyjmującą argument n

if n<0 then K ← K(-n) - dla n < 0 funkcja ma zwracać wartość wywołania samej siebie z argumentem o przeciwnym znaku

else if n=0 then K ← 0 - dla argumentu równego 0 zwróć po prostu zero,

else K ← K(n-1)+2*n-1 - dla reszty przypadków zwróć zartość wyrażenia K(n-1)+2*n-1 (tu też masz jak widzisz rekurencję, bo funkcja wywołuje samą siebie)

K ← oznacza wartość zwracaną z funkcji K() - jest to zapis symboliczny, nie oznacza to, że zmienną do której przypisujesz wartość masz nazwać K (nawet nie możesz, bo nadpiszesz funkcję - chyba - nie znam C#).

Console.WriteLine nie jest Ci tam nigdzie potrzebne - funkcja ma zwracać wartości, prezentacja wyniku powinna się odbywać poza funkcją.

  • Rejestracja: dni
  • Ostatnio: dni
0

Rozumiem treść zadania, co się gdzie robi, nie wiem tylko jak to napisać, nigdy podobnego zadania nie robiłem. Nie wiem jak konkretnie napisać K(n-1)

Maciej Cąderek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1264
0

No raczej nie rozumiesz - masz napisać funkcję K, K(n-1) to po prostu wywołanie tej funkcji. Niech Ci będzie, bo widzę, że nic nie kumasz - masz tu rozwiązanie w JS, jak umiesz to przepisz na C#, jak nie to trudno:

Kopiuj
function K(n) {
  if (n < 0) {
    return K(-n)
  } else if (n === 0) {
    return 0;
  } else {
    return K(n - 1) + 2 * n - 1;
  }
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.