2
再帰関数の演習をしようとしていて、新しいポインタの知識を適用しようとしています。 ==ポインタを使った再帰関数の使用
- N場合:運動は、1に戻って、任意の正の数を取得するにはコラッツの問題を使用するために、私たちに求められますが、それは1
アルゴリズムは以下のとおりであるにその番号からのステップをカウントするように要求しますnは、nは繰り返し奇数の場合、ここで(N * 3)1
上でこのプロセスがintを宣言する私の試みであるN/2
#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++;
^~~~~~~~~~
単精度演算子よりも後置演算子の方が優先度が高くなります。また、コンパイラは、 'void'を返す関数内の式で' return'に関する診断を発行しているはずです。 – EOF
質問のタイトルがあなたの質問と一致しません。 –
'* counter ++;' - >> 'counter + = 1;'はかっこを避けるためのトリックです。 – joop