2
我想为递归函数做一个练习,并试图应用我对指针的新知识。锻炼要求我们使用考拉兹猜想得到任何正数回一个,但它要求计算从数步骤1使用带指针的递归函数
的算法如下:
- 如果n == 1停止
- 如果n为偶数然后重复n个该过程/ 2
- 如果n是奇数重复此过程的(N * 3)+1
这是我试图声明一个int计数器并通过引用传递它该功能,所以我们可以指望有多少步骤需要花费数回1:
#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);
}
}
在编译时它显示我用它
error: expression result unused [-Werror,-Wunused-value]
*counter++;
^~~~~~~~~~
Postfix运算符比一元运算符具有更高的优先级。另外,编译器应该在返回'void'的函数中发布关于'return'的诊断。 – EOF
您的问题标题与您的问题不符。 –
'* counter ++;' - >>'* counter + = 1;'是避免括号的技巧。 – joop