Рекурсия в Matlab против Java - PullRequest
       0

Рекурсия в Matlab против Java

2 голосов
/ 14 сентября 2011

Я взломал рекурсивную функцию в Java для домашней задачи в своем классе Stats, которая выглядела примерно так:

public static int d (int k, int n) {
 if (n == 1) return 1;
 else if (n > k) return 0;
 else return n*d(k-1, n) + n*d(k-1,n-1);
}

Затем я подключил (20, 8) к этой функции и получил 998 925 952,Мой профессор, однако, сказал, что этот ответ был неправильным, и после переосмысления моего кода снова и снова я решил попробовать то же самое в Matlab:

function t = d(k,n)
  t = 0;
  if n == 1
    t = 1;
  elseif n > k
    t = 0;
  else
    t = n*d(k-1, n) + n*d(k-1, n-1);
  end

Эта функция, по-видимому, дала мне правоответ с приведенным выше вводом, 6.1169 * 10 ^ 17.

Это беспокоило меня весь день, и я понятия не имею, почему две, казалось бы, идентичные программы на двух разных языках дали бы мне совершенно разные результаты.Кто-нибудь может помочь объяснить это?

Ответы [ 4 ]

8 голосов
/ 14 сентября 2011

Ваша подпрограмма Matlab, вероятно, работает с вводом с плавающей запятой, поэтому она будет вычислять с плавающей запятой.

Ваша подпрограмма Java имеет целочисленные типы; 6.1169e17 находится далеко за пределами поддерживаемого диапазона, поэтому он переполняется. Попробуйте изменить ваши типы на float или double.

4 голосов
/ 14 сентября 2011

611692004959217300 намного больше, чем 2147483647, что является целым числом MAX_VALUE в Java.

Я получил 611692004959217300, запустив

function d (k, n) {
 if (n == 1) return 1;
 else if (n > k) return 0;
 else return n*d(k-1, n) + n*d(k-1,n-1);
}

console.log(d(20,8));

вFirebug.

3 голосов
/ 14 сентября 2011

Java целые числа имеют размер 4 байта, поэтому число выглядит слишком большим (больше 2 ^ 31).Вы должны повторить попытку, используя "long" или "double" в качестве типа данных для ваших переменных.

3 голосов
/ 14 сентября 2011

Подумайте, какое максимальное значение может иметь int, то есть то, что вы имеете в Java.Теперь рассмотрим, какое максимальное значение может иметь double, что является типом по умолчанию MATLAB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...