Сделал рекурсивную функцию, которая дает количество терминов в последовательности коллатца с заданным начальным номером, например, это код n = 13:
int collatz(long n,long o)
{
if (n!=1) {
if(n%2==0)
return collatz(n/2,o+1);
else
return collatz((n*3)+1,o+1);
} else
printf("%ld\t",o);
}
void main()
{
collatz(13,0);
}
функция работает как положено; однако с некоторыми целыми числами, такими как «n = 113383», что-то переполняется (я думаю) и возвращается:
Process returned -1073741571 (0xC00000FD) execution time : 4.631 s
Press any key to continue.
Извините за нетехническое объяснение, большое спасибо!
n==1
. - person mch   schedule 03.05.2019return
получает значение, когда достигаетprintf
. Вероятно, вам следуетreturn o;
вместо того, чтобы печатать значение внутриcollatz
и печатать результат в вызывающей функции. - person Bodo   schedule 03.05.2019n==1
не только выводит вашу программу из конца функции (что изначально кажется здесь безвредным), но и может вызвать очень странный UB, как описано в этот пост (просто обратите внимание на длину заданного там вопроса и фактическую проблему). - person andreee   schedule 03.05.2019