Strona 1 z 1

mathematica - Table If

: 11 kwie 2015, o 17:21
autor: Aniusia010791
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

: 11 kwie 2015, o 17:46
autor: Medea 2
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]]

mathematica - Table If

: 11 kwie 2015, o 17:51
autor: Aniusia010791
już coś mam. dziękuję. chciałabym sie tylko dowiedzieć jak działa "&&" i czemu służy Clear@fun?

mathematica - Table If

: 11 kwie 2015, o 19:00
autor: Medea 2
Pierwsza linijka usuwa definicję fun (bo nie wiem, czy nie deklarowałaś coś pod tą nazwą), podwójny ampersand to logiczna koniunkcja.

mathematica - Table If

: 11 kwie 2015, o 19:06
autor: Aniusia010791
dziękuję, sama bym nigdy do tego nie doszła, a potrzebne mi to było do pracy mgr

mathematica - Table If

: 12 kwie 2015, o 11:41
autor: luka52
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}]
Medea 2 pisze:przecież nie widać od razu, kiedy ciąg się skończy
skończy się po ok. \(\displaystyle{ \lceil \log_2 5112 \rceil}\) iteracjach.