Ну, я пытался переделать это много раз. Хотя в какой-то момент я подумал, что функция longestSequence поможет, так как она отображает самую длинную последовательность градин. Хотя я не могу понять, как найти или сохранить значение, которое использовалось для поиска. Если бы кто-нибудь мог объяснить, как это сделать, я был бы признателен.
int longestSequence(int n)
{
int u = n;
if(u == 1)
{
return 1;
}
else
{
return max(hailstoneLength(u), longestSequence(u-1));
}
}
Часть, с которой у меня возникли проблемы, - это моя самая длинная последовательность запуска:
int hailLongestSeq(int n)
{
int k;
int longest = 0;
for(int j = 1; j <= n; j++)
{
if(hailstoneLength(j) > longest)
{
longest = hailstoneLength(j);
k = j;
}
}
return k;
}
Я не уверен, как превратить это в рекурсию, я заметил, что для некоторых рекурсий я видел, как люди все еще используют циклы for, но я был уверен, что мы не должны использовать циклы. Это может быть глупый вопрос, но есть ли формула перевода циклов for в рекурсии, если кто-нибудь ее знает?
Ожидаемый результат выглядит следующим образом:
Самая длинная последовательность градин, начинающаяся с числа до 10, имеет длину 20. Самая длинная последовательность градин, начинающаяся с числа до 10, начинается с 9.
поскольку последовательность 9 имеет длину 20 цифр и является самой длинной от 1 до 10.