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