我试图为递归函数做练习,并尝试应用我对指针的新知识。练习要求我们使用Collatz猜想将任何正数反馈给一个,但它要求计算从该数字到1的步数
算法如下:
这是我尝试声明一个int计数器并通过引用函数传递它,这样我们就可以计算重新计算到1的步数:
Ctrl-L
编译时,我在三次使用它时显示此错误
#include <cs50.h>
#include <stdio.h>
void collatz (int n, int *counter);
int main (void)
{
printf("n: ");
int n = get_int();
int counter = 0;
collatz(n, &counter);
printf("%i\n",counter);
}
void collatz (int n, int *counter)
{
if (n == 1)
{
*counter++;
return;
} else if (n % 2 == 0)
{
*counter++;
return collatz(n/2, counter);
}else if (n % 2 != 0)
{
*counter++;
return collatz((n * 3) + 1, counter);
}
}
答案 0 :(得分:-1)
带尾递归的无指针版本。
unsigned collatz2(unsigned val)
{
if (val <= 1) return 0;
if (val%2) val = val*3 +1;
else val /= 2;
return 1+collatz2(val);
}