目前我正在編寫一個程序,其中我需要一個變量count
,每當我調用該函數時該變量都會遞增。在我的情況下,我有一個遞歸函數,並想知道該程序做了多少次迭代。如何在遞歸函數中實現運行變量
我通過計算一個數的階乘簡化了代碼。
我的第一個方法是行不通的,並警告消息結束了:
#include <stdio.h>
int factorial(unsigned int i, int *count)
{
*count += 1;
if(i <= 1)
{
return 1;
}
return i * factorial(i - 1, &count);
}
int main()
{
int i = 10;
int count = 0;
printf("%d Iterations, Factorial of %d is %d\n", count, i, factorial(i, &count));
return 0;
}
warning: passing argument 2 of ‘factorial’ from incompatible pointer type
我的第二個方法不起作用要麼也不會與任何警告消息結束。
#include <stdio.h>
int factorial(unsigned int i, int count)
{
count += 1;
if(i <= 1)
{
return 1;
}
return i * factorial(i - 1, count);
}
int main()
{
int i = 10;
int count = 0;
printf("%d Iterations, Factorial of %d is %d\n", count, i, factorial(i, count));
return 0;
}
我該如何讓它運行?有任何想法嗎?我使用Ubuntu和gcc。
在第一個問題中,使用'return i * factorial(i - 1,count);' –
在'factorial'函數中,變量'count'已經是一個指針。使用它的地址 - 運算符會給你一個指向指針的指針(即'&count'是'int **'類型的)。 –
當您打印結果時,您在'main'函數中還有* undefined behavior *。函數參數的求值順序沒有定義,所以你不知道'countial'的調用是否在'count'變量傳遞給'printf'之前。你需要在'printf'調用之前分別進行'factorial'調用。 –