很多初學C語言的人,一開始都會有求和以及求積的程序,如果用簡單的將輸入的數一個個加起來那樣是很繁瑣的,當然效率是高的,但是程序看起來非常不簡潔!如果你學習用遞歸方式求解,你會發現一切都是那麼簡單!下面的例子就是用遞歸方式求和以及求積。
#include<stdio.h>
#include<stdlib.h>
#define N 10
float g(float a[],int n); /*求和函數*/
float f(float a[],int n); /*求積函數*/
/*為了保證正確度,所有的類型都用浮點型表示,雖然這多消耗了內
存,但能得到更正確的結果,所以這是值得的*/
int main()
{
float x[N+1],y[N+1],sum,num;
int i;
x[0]=1,y[0]=0; /*零位不用,置一*/
for(i=1;i<=N;i++){
printf("please input a type of float :\n");
scanf("%f",&x[i]);
}
for(i=0;i<=N;i++){
y[i]=x[i];
}
num=g(x,N);sum=f(y,N); /*一定要用兩個數組,因為數組做參數,不是傳值調用*/
printf("sum is %f\nthe average sum is %f:\n",sum,sum/N);
printf("num is %f\nthe average num is %f:\n",num,num/N);
getch();return 0;
}
/**功能:求數組的積
返回參數: 數組類型a,整數n代表數組中含有多少個元素
傳入參數: 數組的積
*/
float f(float a[],int n) /*有n個元素存放在數組a中,實際有n+1*/
{
float s=0;
if(n==1){
return a[1];
}
else if(n<=0){ /*這種情況不可能發生,只是用於演示*/
printf("the code is full of errors,the programme will exit");
exit(0);
}
else {
s=a[n];
a[n]=1; /*該位置一,以在後續運算中清除*/
return (s*f(a,n-1));
}
}
/**功能:求數組的和
返回參數: 數組類型a,整數n代表數組中含有多少個元素
傳入參數: 數組的和
*/
float g(float a[],int n)
{
float s=0;
if(n==1)
return a[1];
else if(n<=0){ /*這種情況不可能發生,只是用於演示*/
printf("the code is full of errors,the programme will exit");
exit(0);
}
else {
s=a[n];
a[n]=0;
return (s+g(a,n-1));
}
}