答案可能是显而易见的,但对于我的生活,我看不到它。我试图找出用户提供的正整数收敛到 1 需要多少次迭代(即递归函数是 f(x)=x/2 如果 x 偶数,3x+1 如果 x 奇数)。如果使用蛮力(即通过一系列 if 语句),答案是微不足道的。然而,我的目标是采用递归方法,并陷入无限循环:
#include <stdio.h>
int collatz(long number, int length)
{
while (number != 1)
{
length++;
printf("%ld\n", number);
if ((number % 2) == 0)
collatz(number/2,length);
else
collatz(3*number+1,length);
}
return length;
}
int main()
{
long number;
printf("Input a number\n");
scanf("%ld", &number);
int length=1;
printf("length is %d", collatz(number,length));
return 0;
}
当 number=1 时会出现问题。它没有终止循环,而是继续,因此它无限期地在 1 和 2 之间振荡。