и опять вопросик с рекурсией...
есть переменная с целым числом (например 12345).
надо создать новую переменную которая содержит перевернутое число (тоесть 54321).
нельзя юзать циклы. только с помощью рекурсии. есть идеи?
Спустя 9 минут, 21 секунда (22.11.2010 - 23:04) sergeiss написал(а):
MatrixGod - ты, батенька, давай свои идеи в первую очередь!
Спустя 10 минут, 59 секунд (22.11.2010 - 23:15) kovaldm написал(а):
Опять рекурсия? и опять 12345-54321...
Спустя 3 минуты, 28 секунд (22.11.2010 - 23:19) sergeiss написал(а):
Вот так где-то. Любая строка "выворачивается наизнанку":
Без этой строки if( !is_string( $s ) ) $s=$s.''; почему-то "не так" работает для чисел... А с ней - корректно и для чисел, и для строк.
$s=12345;
echo get_new_val($s);
function get_new_val( &$s )
{
$retval='';
$lastchar='';
if( !is_string( $s ) ) $s=$s.'';
$len=strlen( $s );
if( $len > 0 )
{
$lastchar=$s[$len-1];
$s=substr( $s, 0, $len-1 );
$retval = $lastchar.get_new_val( $s );
}
return $retval;
}
Без этой строки if( !is_string( $s ) ) $s=$s.''; почему-то "не так" работает для чисел... А с ней - корректно и для чисел, и для строк.
Спустя 18 минут, 50 секунд (22.11.2010 - 23:37) Nikitian написал(а):
$str=12345;
echo revstr($str);
function revstr($str,$counter=0){
if($counter==0){
$str=strrev(strval($str));
}
$counter++;
if($counter<50){
return revstr($str,$counter);
}
return$str;
}
Спустя 33 минуты, 3 секунды (23.11.2010 - 00:10) Invis1ble написал(а):
Интересно, какую цель преследует товарищ MatrixGod задавая такие задачки? Своих идей нет, я так понял, но потребность в коде есть...
Спустя 2 часа, 52 минуты, 43 секунды (23.11.2010 - 03:03) kirik написал(а):
Цитата (Invis1ble @ 22.11.2010 - 16:10) |
какую цель преследует товарищ MatrixGod задавая такие задачки? |
Он для стёба :) Приятно смотреть как твой топик наполняется ответами :)
Ребят, как будто никто не помнит прошлой задачи..
$num = 123456;
function rev($num, $i = 0) {
$num = (string) $num;
return isset($num{$i}) ? rev($num, $i + 1) . $num{$i} : '';
}
echo rev($num);
Вот еще извращенский способ с одним аргументом:
$num = 123456;
function rev($num) {
$num = (string) $num;
$i = count(debug_backtrace()) - 1;
return isset($num{$i}) ? rev($num) . $num{$i} : '';
}
echo rev($num);
Спустя 6 часов, 45 минут, 4 секунды (23.11.2010 - 09:48) linker написал(а):
:) Спорим я решу эту задачу одной функцией и в одну строчку? :)
echo 12345, strrev(12345);глупые преподы, которые дают такие задания, не могут понять одной вещи, что нельзя обязывать программера выбирать только один алгоритм, если есть решение проще, то оно просто обязано быть применено.
Спустя 26 минут, 55 секунд (23.11.2010 - 10:15) kirik написал(а):
Цитата (linker @ 23.11.2010 - 01:48) |
Спорим я решу эту задачу одной функцией и в одну строчку? |
Так не честно!
Цитата (linker @ 23.11.2010 - 01:48) |
глупые преподы, которые дают такие задания, не могут понять одной вещи, что нельзя обязывать программера выбирать только один алгоритм, если есть решение проще, то оно просто обязано быть применено. |
На самом деле такими заданиями развивается логика мышления и причем неплохо. Другое дело что негодные ученики по форумам спрашивают ответы Воспользоваться готовой функцией может каждый (и даже господин П.), а вот осознанно рассказать как работает сортировка пузырьковым методом...
Спустя 13 минут, 31 секунда (23.11.2010 - 10:29) linker написал(а):
Вот построение дерева каталогов реально развивает понимание рекурсии, а задача подобного типа развивает иное мышление - как быстро и как короче развернуть значение.
Спустя 9 минут, 35 секунд (23.11.2010 - 10:38) sergeiss написал(а):
Цитата (linker @ 23.11.2010 - 10:48) |
глупые преподы, которые дают такие задания, не могут понять одной вещи, что нельзя обязывать программера выбирать только один алгоритм, если есть решение проще, то оно просто обязано быть применено. |
Тут я не согласен, а согласен с кириком. Решение одной и той же задачи разными способами с разными ограничениями как раз хорошо помогает изучить язык. Потом уже можно говорить о преимуществах и недостатках того или иного способа.
Правда, тут есть одно условие... Человек САМ должен бы проделать такие штуковины. А на форуме уже выложить свой вариант решения, с целью спросить о его оптимальности. С учетом заданных ограничений.
PS. Так что преподаватель, я думаю, наоборот умный
Спустя 3 минуты, 44 секунды (23.11.2010 - 10:42) linker написал(а):
Цитата |
как раз хорошо помогает изучить язык |
Стоп, не язык, а всего лишь один из возможных алгоритмов. Язык программирования и алгоритм, это разные вещи. Если стоит цель изучения языка, то это как раз из разряда "как быстро и как короче развернуть значение". Вот тут как раз и применяются все навыки и знания того самого языка, который ты учишь.
Спустя 4 минуты, 59 секунд (23.11.2010 - 10:47) sergeiss написал(а):
Цитата (linker @ 23.11.2010 - 11:42) |
Стоп, не язык, а всего лишь один из возможных алгоритмов. Язык программирования и алгоритм, это разные вещи. |
И всё-таки такие хреновины помогают лучше узнать именно разные возможности языка Вспомни: иногда, когда кто-то что-то спросит (причем простое), то в ответах народ начинает очень сильно "изголяться", предлагая разные варианты "решений", вплоть до использования классов. Хотя реальное решение может занимать одну-две строки. Почему? Да потому, что язык это позволяет!!! Вот и показывают, кто что знает и умеет
С другой стороны. Много раз на форуме было, что человек пытается что-то сделать, у него не получается, он просит совета. А в итоге оказывается, что просто этот человек не знал некоторые возможности языка и пытался что-то сделать "альтернативными" методами.
Спустя 10 минут, 31 секунда (23.11.2010 - 10:57) linker написал(а):
А разве знание применение одного strrev(), вместо огорода с рекурсией не говорит о возможностях языка?
Вот именно попытка сделать это рекурсией, говорит об альтернативном методе при незнании возможностей языка. Повторюсь, построение дерева каталогов позволяет не только продумать алгоритм с рекурсией, но проявить свои знания языка (opendir(), scandir(), glob()).
Вот именно попытка сделать это рекурсией, говорит об альтернативном методе при незнании возможностей языка. Повторюсь, построение дерева каталогов позволяет не только продумать алгоритм с рекурсией, но проявить свои знания языка (opendir(), scandir(), glob()).