[英]using recursive function with pointers
我正在嘗試進行遞歸函數的練習,並嘗試應用新的指針知識。 練習要求我們使用Collatz猜想將任何正數恢復為1,但是它要求計算從該數到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);
}
}
編譯時,在我使用過3次后會顯示此錯誤
error: expression result unused [-Werror,-Wunused-value]
*counter++;
^~~~~~~~~~
帶有尾遞歸的無指針版本。
unsigned collatz2(unsigned val)
{
if (val <= 1) return 0;
if (val%2) val = val*3 +1;
else val /= 2;
return 1+collatz2(val);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.