Написать функцию на основе данного TestUnit - PullRequest
1 голос
/ 18 мая 2010

Мне нужно написать функцию для удовлетворения этого ввода -> список вывода:

0 -> 0
1 -> 1
3 -> 2
4 -> 3
5 -> 5
7 -> 13
9 -> 34

f (x) = ??

Ответы [ 3 ]

2 голосов
/ 18 мая 2010

Решено Eureqa

round(exp(0.4807*input - 0.799938))

2 голосов
/ 18 мая 2010

Ну, это невероятно просто ... если вас не волнует чрезмерная подгонка , тогда вы можете сделать:

switch(input)
     case 0: report 0
     case 1: report 1
     case 3: report 2
     ...
     default: report whatever

Возможно, вам нужно больше ограничений на проблему, если вы хотите хорошее решение. Вы также можете рассмотреть график функции, чтобы увидеть, есть ли какой-либо очевидный образец, или, возможно, показать задействованные биты. Также было бы полезно узнать, являются ли входы и выходы целочисленными или действительными (предполагается, что функция является непрерывной или дискретной?). Без этой информации немного трудно помочь.

Редактировать
Отображение пропущенных чисел помогает:

0 -> 0
1 -> 1
2 -> 1
3 -> 2
4 -> 3
5 -> 5
6 -> 8
7 -> 13
8 -> 21
9 -> 34

(Это числа Фибоначчи: f (x) = f (x-1) + f (x-2), где f (0) = 0 и f (1) = 1).

PS
Это функция, для которой динамическое программирование или памятка особенно полезны.

1 голос
/ 18 мая 2010

Я не знаю, домашняя работа или нет, но это очень известная последовательность. (Довольно большой) намек на то, что f (n) зависит от f (n-1) и f (n-2). Если вас не интересует просто ответ, нажмите здесь . Реализация последовательности довольно просто сделать рекурсивно, но отредактируйте свой пост, если у вас возникли проблемы с ним, и укажите, на какую часть вы застряли

...