Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Непонятнки с рекурсией + пару сопутствующих вопросов (плз хелп!) (https://javascript.ru/forum/misc/54954-neponyatnki-s-rekursiejj-paru-soputstvuyushhikh-voprosov-plz-khelp.html)

by_dofamin 07.04.2015 20:29

Непонятнки с рекурсией + пару сопутствующих вопросов (плз хелп!)
 
Доброе времени суток)
Сам по себе новичок, поэтому жду критики).
Собственно скрипт подбирает цифры в заданном диапазоне (без повторений).
Дабы не повторялись цифры, решил использовать рекурскию, но тут посыпались проблемы. Надеюсь поможете разобраться с проблемой.

Собственно вот вопросы:
1 - Почему когда срабатывает рекурсия - переменная undefined;
2 - Как по мне это гамно код. Можно ли передать саму переменную в аргумент функции. Если точнее то я хочу передавать аргументом не значение переменной, а ссылку на переменную. Как то так) Ну по коду думаю поймёте.
if(q==1){
if((rot == cur)) random_numb(q, len, min)
else return cur;
};
if(q==2){

if(back == cur) random_numb(q, len, min)
else return cur;
};
if(q==3){
if(font == cur) random_numb(q, len, min)
else return cur;
};

А вот ссылка на пример кода
https://jsfiddle.net/72p4yokb/
Спасибо за внимание! :)

рони 07.04.2015 20:50

Генерация трёх чисел без повторов
 
by_dofamin,
вариант
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title> - jsFiddle demo</title>
  <style type='text/css'>
    #id{
    font-size:20px;
    color:#000;
}
  </style>
<script>
window.onload=function(){
var rot = back = font = 0;
var t, arr;
var text = document.getElementById("id");
function random_all(){
            arr = [];
            back = random_numb(5, 0);
            font = random_numb(5, 0);
			rot = random_numb(10, 0);



      t = "rot: "+rot+",<br> back: "+back+"<br> font: "+font;
      text.innerHTML= t;
		};

		function random_numb(len, min){
			var cur = Math.floor(Math.random() * ((len-1) - min + min)) + min;
            if (arr.indexOf(cur) != -1) return random_numb(len, min)
            arr.push(cur)
            return cur
		};
		setInterval(function(){
			random_all();
		},1000);
}
</script>
</head>
<body>
  <div id="id">Test</div>
</body>
</html>

by_dofamin 08.04.2015 15:00

рони, Спасибо.
Подсказал варик получше) Хотя в Вашем случае все back, font , rot будут разные. Вариант типа rot = 1, back = 1 - исключен.

PS Понял в чем траб был с моим кодом, надо было return для рекурсии сделать, просто код далее идёт после рекурсии.


Часовой пояс GMT +3, время: 22:30.