Mam problem z wygenerowaniem takiego ciągu liczb
\(\displaystyle{ \left\{ 5112,2556,1278,639,319,159,79,39,19,9\right\}}\)
czyli chodzi o to aby zaczynając od 5112 dzielić ją na pół, a jeśli liczba jest nieparzysta to najpierw odejmowała sie jedynka i dalej dzieliło się na pół.
Na pewno musi być coś z Table. Dalej kombinowałam z If, While ale nie wychodzi mi.
If zapisałam w taki sposób
\(\displaystyle{ If \left[ EvenQ\left[ i\right] , i/2, \left( i - 1\right) /2\right]}\)
Proszę o pomoc
mathematica - Table If
-
Aniusia010791
- Użytkownik

- Posty: 15
- Rejestracja: 8 paź 2010, o 20:17
- Płeć: Kobieta
- Lokalizacja: S....
- Podziękował: 2 razy
- Medea 2
- Użytkownik

- Posty: 2489
- Rejestracja: 30 lis 2014, o 11:03
- Płeć: Kobieta
- Podziękował: 23 razy
- Pomógł: 479 razy
mathematica - Table If
Nie widzę rozwiązania z Table, przecież nie widać od razu, kiedy ciąg się skończy. Polecam rekurencję:
Kod: Zaznacz cały
Clear@fun;
fun[1] := {1}
fun[n_] :=
fun[n] = If[
EvenQ[n] && n > 0, {n}~Join~fun[n/2], {n}~Join~fun[(n - 1)/2]]-
Aniusia010791
- Użytkownik

- Posty: 15
- Rejestracja: 8 paź 2010, o 20:17
- Płeć: Kobieta
- Lokalizacja: S....
- Podziękował: 2 razy
mathematica - Table If
już coś mam. dziękuję. chciałabym sie tylko dowiedzieć jak działa "&&" i czemu służy Clear@fun?
-
Aniusia010791
- Użytkownik

- Posty: 15
- Rejestracja: 8 paź 2010, o 20:17
- Płeć: Kobieta
- Lokalizacja: S....
- Podziękował: 2 razy
mathematica - Table If
dziękuję, sama bym nigdy do tego nie doszła, a potrzebne mi to było do pracy mgr
-
luka52
- Użytkownik

- Posty: 8297
- Rejestracja: 1 maja 2006, o 20:54
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Podziękował: 47 razy
- Pomógł: 1814 razy
mathematica - Table If
Inny sposób to po prostu dzielić liczby przez 2 i skorzystać z funkcji podłoga:
Kod: Zaznacz cały
RecurrenceTable[{a[n + 1] == Floor[a[n]/2], a[1] == 5112}, a, {n, 1, 10}]skończy się po ok. \(\displaystyle{ \lceil \log_2 5112 \rceil}\) iteracjach.Medea 2 pisze:przecież nie widać od razu, kiedy ciąg się skończy