尾遞歸
如果一個函數中所有的遞歸形式的調用都出現在函數的末尾,我們稱這個遞歸函數是尾遞歸的。
當遞歸調用是整個函數體系中最後執行的語句且它的返回值不屬於表達式的一部分時,這個遞歸調用就是尾遞歸。
特點:在迴歸的過程中不用做任何操作,大多數的現代編譯器會根據這備戰特點自動生成優化的代碼。
#include<stdio.h>
int facttail(int n, int a) {
if (n < 0)
return 0;
else if (n == 0)
return 1;
else if (n == 1)
return a;
else
return facttail(n - 1, n*a);
}
int main() {
int a;
int b = 1;
printf("請輸入一個值:\n");
scanf("%d", &a);
int sum;
sum = facttail(a,b);
printf("這個值的階乘結果是%d\n", sum);
system("pause");
}
最後思考一下,基本遞歸和尾遞歸爲什麼區分,一般現代化程序都考慮時間而不去考慮內存,那基本遞歸和尾遞歸求階乘那種方法更快呢?