![]() |
|
|||||||
| 論壇說明 |
|
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
|
主題工具 | 顯示模式 |
|
|
#5 (permalink) |
|
管理員
![]() ![]() |
這是遞回函式的寫法 ... 因為... 所以... 用到了 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");
}
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");
}
此帖於 2006-05-11 04:40 PM 被 getter 編輯. |
|
|
送花文章: 37855,
|