這是遞回函式的寫法 ... 因為... 所以... 用到了 2 個遞回函式
1. n! 求階乘的遞回函式
2. 運算加總的遞回函式,用 switch() 的方法。
供參考
檔案下載 (原始碼+執行檔)
http://rapidshare.de/files/20164379/SUMS.rar.html
語法:
/*
遞回函式06-1
數學式︰
n x^k x^1 k^2 k^n
Σ ═---═--- + --- + ... + ---
k=1 k! 1! 2! n!
let x = 0.1 ; n = 8
*/
#include <stdio.h>
#include <stdlib.h>
fact(int n) /* 遞回函式,求 n! 階乘 */
{
int sum = 1;
if (n==0 || n==1)
{ return 1; }
else
{
sum = n * fact(n-1); /* 自己呼叫自己做連乘到 n */
return sum;
}
}
double my_fun(double x,int n) /* 遞回函式,數學式加總 */
{
int i=1;
switch (n)
{
case 0: /* n 為 0 的狀況 */
return pow(x,0)/i; /* 可以用 return 1; 取代 */
case 1: /* n 為 1 的狀況 */
i = fact(n);
return pow(x,1)/i;
default: /* n > 1 的狀況 */
i = fact(n);
return my_fun(x,n-1)+pow(x,n)/i; /* 自己呼叫自己加總到 n */
}
}
display_00() /* 顯示畫面 */
{
system("cls");
puts("數學公式:");
puts(" n x^k x^1 k^2 k^n");
puts("Σ = --- = --- + --- + ... + ---");
puts(" k=1 k! 1! 2! n!");
puts("\n let x = 0.1 ; n = 8");
}
main() /* 主程式 */
{
int x;
display_00();
for(x=0; x<=8; x++) /* 依序顯示 n = 0 ~ 8 的值 */
{
printf("\n n=%d,SUM = %0.16f",x,my_fun(0.1,x));
}
puts("\n");
system("pause");
}
1. n! 求階乘的遞回函式
2. 運算加總的遞回函式,用 if - else if - else 的方法 。
語法:
/*
遞回函式06-2
數學式︰
n x^k x^1 k^2 k^n
Σ ═---═--- + --- + ... + ---
k=1 k! 1! 2! n!
let x = 0.1 ; n = 8
*/
#include <stdio.h>
#include <stdlib.h>
fact(int n) /* 遞回函式,求 n! 階乘 */
{
int sum = 1;
if (n==0 || n==1)
{ return 1; }
else
{
sum = n * fact(n-1);
return sum;
}
}
double my_fun(double x,int n) /* 遞回函式,數學式加總 */
{
int i=1;
if (n==0) /* n 為 0 的狀況 */
return pow(x,0)/i; /* 可以用 return 1; 取代 */
else if ( n==1 ) /* n 為 1 的狀況 */
return x;
else /* n > 1 的狀況 */
{
i = fact(n);
return my_fun(x,n-1)+pow(x,n)/i;
}
}
display_00() /* 顯示畫面 */
{
system("cls");
puts("數學公式:");
puts(" n x^k x^1 k^2 k^n");
puts("Σ = --- = --- + --- + ... + ---");
puts(" k=1 k! 1! 2! n!");
puts("\n let x = 0.1 ; n = 8");
}
main() /* 主程式 */
{
int x;
display_00();
for(x=0; x<=8; x++) /* 依序顯示 n = 0 ~ 8 的值 */
{
printf("\n n=%d,SUM = %0.16f",x,my_fun(0.1,x));
}
puts("\n");
system("pause");
}