Również powodzenia, ale kurwa, jak widzę takie zadania, gdzie mam odszyfrować co robi algorytm wyciśnięty z tyłka jakiegoś profesorka to mnie krew zalewa
Zadanie nr 1 odpowiedź w JS: function licz(x){ if ( x == 1 ) { return 1; } else { var w = licz( parseInt(x/2) ); if ( x % 2 == 1 ) { return w + 1; }else{ return w - 1; } } } console.log( { 11 : licz(11),13 : licz(13),21 : licz(21),32 : licz(32)} );
dzięki panu zapisowi to zrozumiałem w sumie jak by to rozpisać tak jak to widzę to wyszedł by mi taki kod ale już trochę rozumiem rekurencje mam nadzieję że komuś to obrazowe przedstawienie też pomoże zrozumieć rekurencje Zadanie nr 1 odpowiedź w JS: function licz(11){ if ( 11 == 1 ) { return 1; } else { var w = licz( parseInt(11/2)// //wynik5 function licz(5){ if ( 5 == 1 ) { return 1; } else { var w = licz( parseInt(5/2) // //wynik 2 // 1 wykonanie function licz(2){ if ( 2 == 1 ) { return 1; } else { var w = licz( parseInt(2/2)// // wynik 1 //2 wykonanie function licz(1){ if ( 1== 1 ) { return 1; // wynik 1 zwrócenie 1 brak potrzeby kolejnego wykonania funkcji //3 wykonanie ); if ( 1 % 2 == 1 ) { return 1 + 1; }else{ return 1 - 1; } //1 wykonanie } } ); if ( 2 % 2 == 1 ) { return 2 + 1; }else{ return 2 - 1; } //2 wykonanie } } ); if ( 1 % 2 == 1 ) { return 1+ 1; }else{ return 1 - 1; // } //3 wykonanie } }
Nie pasuje mi coś w tym 2.3 zadaniu. Przecież 100 w binarnym to jest nic innego jak 01100100 i wtedy też mamy bitów zamiast 7, bo to 0 na początku można wyrzucać. Więc najmniejsza to by była jakbyśmy podmienili to ostatnie 0 na 1, tzn. 01100101, co rzeczywiście nie daje dobrego wyniku, ale niezbyt rozumiem skąd nagle ci się wzięło 10000000.
nie rozumiem dlaczego gdy w funkcji licz(11) biore ten przeciwny wypadek to 11 div 2 = 5 i dlaczego potem znowu licze funkcje licz tylko od (5)? W skrócie dlaczego ta funkcja sie powtarza tylko, za x wstawiam ciagle zmieniona wartośc w?
Rekurencja, zwana także rekursją (ang. recursion, z łac. recurrere, przybiec z powrotem) - odwoływanie się np. funkcji lub definicji do samej siebie. (źródło: pl.wikipedia.org/wiki/Rekurencja) funkcja odwołuje się sama do siebie. proponuję obejżeć filmik parę razy ;) nie zmęczę się. pzdr
Poprawną odpowiedzią w 2.2 jest liczba x =2, gdyż jak widać mamy dla x =1 dwie poprawne odpowiedzi co już wyklucza się samo z siebie. Dla x=2(czyli następnej liczy po 1) mamy dwa wywołania funkcji a podstawiając ją do wzoru x =2^k-1 pięknie nam wychodzi prawidłowa odpowiedź :-)
2.2 podany mamy przykład, dla x=13 k =4. dlatego odpowiedź a jest błędna, bo gdyby x=k^2 to najmniejszą wartością x dla k=4 byłoby 16, a my wiemy już, że dla x=13 też k=4. 13>=16 odpowiedź a błędna
nie podstawiasz poprawnej odpowiedzi dla każdej z następnych liczb, to jest tylko przykład dla matołów jak wygląda liczba wywołań w stosunku do liczy przekazywanej w parametrze funkcji
Dobrze wytłumaczone, dzięki bardzo i powodzenia wszystkim co zdają infę!
Również powodzenia, ale kurwa, jak widzę takie zadania, gdzie mam odszyfrować co robi algorytm wyciśnięty z tyłka jakiegoś profesorka to mnie krew zalewa
Całe zadanie staję się proste jak się tylko zauważy, że jest to pewna zamiana na liczbę binarną.
mega wytłumaczone, dzięks
Ratuje mi pan życie
Zadanie nr 1 odpowiedź w JS:
function licz(x){
if ( x == 1 ) {
return 1;
} else {
var w = licz( parseInt(x/2) );
if ( x % 2 == 1 ) {
return w + 1;
}else{
return w - 1;
}
}
}
console.log( { 11 : licz(11),13 : licz(13),21 : licz(21),32 : licz(32)} );
a return w-1 nie zwraca wartości w 'w' tylko pomniejszonej o 1 ?
dzięki panu zapisowi to zrozumiałem w sumie jak by to rozpisać tak jak to widzę to wyszedł by mi taki kod ale już trochę rozumiem rekurencje mam nadzieję że komuś to obrazowe przedstawienie też pomoże zrozumieć rekurencje
Zadanie nr 1 odpowiedź w JS:
function licz(11){
if ( 11 == 1 ) {
return 1;
} else {
var w = licz( parseInt(11/2)//
//wynik5
function licz(5){
if ( 5 == 1 ) {
return 1;
} else {
var w = licz( parseInt(5/2) //
//wynik 2
// 1 wykonanie
function licz(2){
if ( 2 == 1 ) {
return 1;
} else {
var w = licz( parseInt(2/2)//
// wynik 1
//2 wykonanie
function licz(1){
if ( 1== 1 ) {
return 1;
// wynik 1 zwrócenie 1 brak potrzeby kolejnego wykonania funkcji
//3 wykonanie
);
if ( 1 % 2 == 1 ) {
return 1 + 1;
}else{
return 1 - 1;
} //1 wykonanie
}
}
);
if ( 2 % 2 == 1 ) {
return 2 + 1;
}else{
return 2 - 1;
} //2 wykonanie
}
}
);
if ( 1 % 2 == 1 ) {
return 1+ 1;
}else{
return 1 - 1; //
} //3 wykonanie
}
}
Nie pasuje mi coś w tym 2.3 zadaniu. Przecież 100 w binarnym to jest nic innego jak 01100100 i wtedy też mamy bitów zamiast 7, bo to 0 na początku można wyrzucać. Więc najmniejsza to by była jakbyśmy podmienili to ostatnie 0 na 1, tzn. 01100101, co rzeczywiście nie daje dobrego wyniku, ale niezbyt rozumiem skąd nagle ci się wzięło 10000000.
Nie możesz wywalić zer na binarce na końcu tylko z te zera z przodu wywalasz
w końcu zrozumiałem to gówno jakim jest rekurencja
Zadanie 1 w Javie:
public static int licz(int x) {
int w;
if (x==1) {
return 1;
} else {
w=licz(x/2);
if (x%2==1) return w+1;
else return w-1;
}
}
nie rozumiem dlaczego gdy w funkcji licz(11) biore ten przeciwny wypadek to 11 div 2 = 5 i dlaczego potem znowu licze funkcje licz tylko od (5)? W skrócie dlaczego ta funkcja sie powtarza tylko, za x wstawiam ciagle zmieniona wartośc w?
Rekurencja, zwana także rekursją (ang. recursion, z łac. recurrere, przybiec z powrotem) - odwoływanie się np. funkcji lub definicji do samej siebie. (źródło: pl.wikipedia.org/wiki/Rekurencja)
funkcja odwołuje się sama do siebie. proponuję obejżeć filmik parę razy ;) nie zmęczę się. pzdr
Mikołaj Telega sprawdziłem odrazu po obejrzeniu a kom napisałem wcześniej i juz wiem ale dxieki za odp tak czy siak
a powiedz czemu nie bierze sie dla 11 6 tylko 5 ? komputer pokazuje zawsze 6 :/ to mnie przytloczylo...
hmmmmm...... odpowiem. jak odpowiesz mi dlaczego miało by się brać 6 zamiast 5 ;)
Mikołaj Telega bo 5.5 a przy połowie mówiono że się już do większej liczby zaokrągla a..... xD
Poprawną odpowiedzią w 2.2 jest liczba x =2, gdyż jak widać mamy dla x =1 dwie poprawne odpowiedzi co już wyklucza się samo z siebie. Dla x=2(czyli następnej liczy po 1) mamy dwa wywołania funkcji a podstawiając ją do wzoru x =2^k-1 pięknie nam wychodzi prawidłowa odpowiedź :-)
Dobrze przygotowany materiał, oby tak dalej ;)
2.2 podany mamy przykład, dla x=13 k =4. dlatego odpowiedź a jest błędna, bo gdyby x=k^2 to najmniejszą wartością x dla k=4 byłoby 16, a my wiemy już, że dla x=13 też k=4. 13>=16 odpowiedź a błędna
nie podstawiasz poprawnej odpowiedzi dla każdej z następnych liczb, to jest tylko przykład dla matołów jak wygląda liczba wywołań w stosunku do liczy przekazywanej w parametrze funkcji
Paweł Sajnóg alternatywą znalezienia poprawnego rozwiązania jest wykluczenie pozostałych.
SIema Byku Zagrasz Zemną w csa
Kiedy majkraft
nie przewiduję
xd
B)
xd
Chore to, ale dzięki za dobre tłumaczenie!