Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.05.2017, 18:50
Интересующийся
Отправить личное сообщение для Alexsandr Посмотреть профиль Найти все сообщения от Alexsandr
 
Регистрация: 22.05.2017
Сообщений: 25

функция нахождения наименьшего делителя числа итеративный процесс
const smallestDivisor = (num) => {
const denominator = 2;
const result = (num, denominator) => {
  return (num % denominator);
}
if (result === 0) {
return denominator;
} 
 *!*result(num, denominator+1);*/!*
};

smallestDivisor(100);

Суть программа для нахождения наименьшего делителя числа, работает просто прибавляет к делителю 1 и смотрит если делит без остатка то все ок и возвращает делитель
Но не работает в 9 строчке возвращает undefined
Ответить с цитированием
  #2 (permalink)  
Старый 22.05.2017, 19:05
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

const smallestDivisor = num => {
	let d = 2;
	while(num % d++) {}
	return d;
};

smallestDivisor(100);


Оно?
Ответить с цитированием
  #3 (permalink)  
Старый 22.05.2017, 19:14
Интересующийся
Отправить личное сообщение для Alexsandr Посмотреть профиль Найти все сообщения от Alexsandr
 
Регистрация: 22.05.2017
Сообщений: 25

Сообщение от Ruslan_xDD
Оно?
Нет меня интересовало почему в моем коде происходит undefined
Мне не нужно решение мне нужно понять почему происходит ошибка
Ответить с цитированием
  #4 (permalink)  
Старый 22.05.2017, 19:38
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,134

Сообщение от Alexsandr Посмотреть сообщение
Нет меня интересовало почему в моем коде происходит undefined
Мне не нужно решение мне нужно понять почему происходит ошибка
Функция это не цыкл в котором есть условие завершение итераций. (ваш К.О.)
По этому функция вызывается один раз. (ваш К.О.)
Условие где стоит return не выполнятся по этому результат выражения == undefined (ваш К.О.)
Ответить с цитированием
  #5 (permalink)  
Старый 22.05.2017, 19:54
Интересующийся
Отправить личное сообщение для Alexsandr Посмотреть профиль Найти все сообщения от Alexsandr
 
Регистрация: 22.05.2017
Сообщений: 25

Сообщение от MallSerg
Условие где стоит return не выполнятся по этому результат выражения == undefined (
if (result === 0) в смысле? result она считает за функцию? А не результат вычисления num % denominator ?
допустим if не выполняется но есть же всегда другая ветка result(num, denominator+1);
Ответить с цитированием
  #6 (permalink)  
Старый 22.05.2017, 20:08
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Alexsandr, return перед вызовом не стоит.
Ответить с цитированием
  #7 (permalink)  
Старый 22.05.2017, 23:07
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

https://github.com/nervgh/yum.js/blo...src/yum.js#L90
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 23.05.2017, 11:25
Интересующийся
Отправить личное сообщение для Alexsandr Посмотреть профиль Найти все сообщения от Alexsandr
 
Регистрация: 22.05.2017
Сообщений: 25

1	const smallestDivisor = (num) => {
2	  // BEGIN (write your solution here)
3	const denominator = 2;
4	const result = (num, denominator) => {
5	   return(num%denominator);
6	}
7	result(num, denominator);
8	if (result === 0) {
9	return denominator;
10	} else if (denominator === 10)
11	{
12	return 1;
13	} else {
14	return result(num, denominator+1);
15	}  // END
16	};
17	
18	smallestDivisor(10);

В седьмой строке вычисляется значение функции-константы result
В восьмой строке сравнивается значение result c 0
Проблема в том что ничего не происходит, программа идет дальше вниз хотя условие должно выполняться
Почему так ведь result это функция и когда она вычисляется то уже константа, или в условии выполняется функция? if (result === 0)
Ответить с цитированием
  #9 (permalink)  
Старый 23.05.2017, 11:45
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Alexsandr, так Вы пытаетесь саму функцию сравнить с нулём, а не результат её выполнения.

const smallestDivisor = (num) => {
const denominator = 2;
const result = (num, denominator) => {
  return (num % denominator);
}
if (result(num, denominator) === 0) {
return denominator;
} 
 return result(num, denominator+1);
};

smallestDivisor(100);
Ответить с цитированием
  #10 (permalink)  
Старый 23.05.2017, 12:42
Интересующийся
Отправить личное сообщение для Alexsandr Посмотреть профиль Найти все сообщения от Alexsandr
 
Регистрация: 22.05.2017
Сообщений: 25

Сообщение от Ruslan_xDD
Вы пытаетесь саму функцию сравнить с нулём, а не результат её выполнения.
А как сделать чтоб сравнить результат? В описании функции я же писал вернуть значение вычисленного return (num % denominator);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли функция, делающая однозн. числа двузначными?) Т.е. "1" => "01" FirstFrost Общие вопросы Javascript 14 08.02.2012 17:38