在宣告 fact 函式的傳入值型別漏掉了,main 的傳入、傳回值型別也漏掉了。
複製內容到剪貼板
代碼:
/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>
int main(void) /* 主程式 */
{
int n;
long fact(int n);
printf("n!=n*(n-1)!請輸入n值:");
scanf("%d",&n);
printf("%d!=%ld\n",n,fact(n));
system("PAUSE");
return 0;
}
/* 定義fact()函數 */
long fact(int n)
{
if (n==0) /* 當n為0即0!=1則傳回1 */
return(1);
else
return(n*fact(n-1)); /* 呼叫遞迴函數func(n-1) */
};
或是,也可以把函式的宣告放在最前面,看起來會比較整齊。
複製內容到剪貼板
代碼:
/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>
long fact(int); /* 宣告fact()函數為長整數值 */
int main(void) /* 主程式 */
{
int n;
printf("n!=n*(n-1)!請輸入n值:");
scanf("%d",&n);
printf("%d!=%ld\n",n,fact(n));
system("PAUSE");
return 0;
}
/* 定義fact()函數 */
long fact(int n)
{
if (n==0) /* 當n為0即0!=1則傳回1 */
return(1);
else
return(n*fact(n-1)); /* 呼叫遞迴函數func(n-1) */
}
或是,把函式的定義往前放,不用寫宣告。
複製內容到剪貼板
代碼:
/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>
/* 定義fact()函數 */
long fact(int n)
{
if (n==0) /* 當n為0即0!=1則傳回1 */
return(1);
else
return(n*fact(n-1)); /* 呼叫遞迴函數func(n-1) */
}
int main(void) /* 主程式 */
{
int n;
printf("n!=n*(n-1)!請輸入n值:");
scanf("%d",&n);
printf("%d!=%ld\n",n,fact(n));
system("PAUSE");
return 0;
}
或是,把函式的定義放在另一個函式的內部,也不用寫宣告。
複製內容到剪貼板
代碼:
/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>
int main(void) /* 主程式 */
{
int n;
/* 定義fact()函數 */
long fact(int n)
{
if (n==0) /* 當n為0即0!=1則傳回1 */
return(1);
else
return(n*fact(n-1)); /* 呼叫遞迴函數func(n-1) */
}
printf("n!=n*(n-1)!請輸入n值:");
scanf("%d",&n);
printf("%d!=%ld\n",n,fact(n));
system("PAUSE");
return 0;
}