#include <stdio.h>
int FAC(int a)
{
if (a >= 1, a--)
{
return a 1 * a;
FAC(a);
}
}
int main()
{
int a = 0;
int ret = 0;
scanf("%d", &a);
ret = FAC(a);
printf("%d\n", ret);
}
如果我輸入5結果是8
但在第一個函式中不應該是
5>=1 5-1 回傳 5*4 4>=1...
uj5u.com熱心網友回復:
首先,在使用遞回之前要回傳一個值。該return關鍵字立即生效,因此不會執行此后的所有陳述句。
此外,您的階乘函式實際上并不計算 的階乘a。
階乘函式示例:
遞回
int factorial(int n) {
if(n > 0) {
return n * factorial(n - 1); // n! = n * (n-1) * (n-2) * ... * 1
} else {
return 1;
}
}
迭代
// Does exactly the same, just an iterative function
int factorial(int n) {
int fac = 1;
for(; n > 0; n--) {
fac *= n;
}
return fac;
}
uj5u.com熱心網友回復:
FAC理想情況下,階乘函式 ( ) 應該類似于:
unsigned int FAC(unsigned int a)
{
// base condition - break out of recursion
if (a <= 1)
return 1;
return a * FAC(a - 1);
}
unsigned int將引數范圍限制在[0, UINT_MAX].
請注意,FAC回傳 a unsigned int,因此您可以提供最多 12 的引數值,否則會出現溢位并且您會看到奇怪的輸出。
順便說一句,UINT_MAX定義在limits.h
uj5u.com熱心網友回復:
#include <stdio.h>
int FAC(int a)
{
if (a < 0) {
return -1;
} else {
if (a == 0) {
return 1;
} else {
return (a * FAC(a-1));
}
}
}
int main()
{
int a = 0;
int ret = 0;
scanf("%d", &a);
ret = FAC(a);
if (ret == -1) {
printf("%s\n", "Input was a negative integer.");
} else {
printf("%d\n", ret);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/368926.html
標籤:C
