第三章-函式和遞迴3
阿新 • • 發佈:2021-10-19
遞迴與迭代
遞迴:自己呼叫自己
迭代:重複(類似於迴圈)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //求n的階乘(不考慮溢位) //int Fac1(int n) //{ // int i = 0; // int ret = 1; // for (i = 1; i <= n;i++) // { // ret *= i; // } // return ret; //} //遞迴 int Fac2(int n) { if (n <= 1) return 1; else returnn * Fac2(n - 1); } int main() { int n = 0; int ret = 0; scanf("%d", &n); //ret = Fac1(n); ret = Fac2(n);//迴圈的方式 printf("%d\n", ret); return 0; }
//求第n個斐波那契數(不考慮溢位) //1 1 2 3 5 8 13 21 34 55 ...(前兩個數之和為第三個) //fib(n) n<=2:1 n>2:fib(n-1)+fib(n-2) #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> //效率低 //int count=0; //int Fib(int n) //{ // if (n == 3) // { // count++; // } // if (n <= 2) // return 1; // else // return Fib(n - 1) + Fib(n - 2); //} int Fib(int n) { int a = 1; int b = 1; int c = 1; while (n > 2) { c = a + b; a= b; b = c; n--; } return c; } int main() { int n = 0; int ret = 0; scanf("%d", &n); ret = Fib(n); printf("ret=%d\n", ret); //printf("count=%d\n",count); return 0; }
1. 許多問題是以遞迴的形式進行解釋的,這只是因為它比非遞迴的形式更為清晰。
2. 但是這些問題的迭代實現往往比遞迴實現效率更高,雖然程式碼的可讀性稍微差些。
3. 當一個問題相當複雜,難以用迭代實現時,此時遞迴實現的簡潔性便可以補償它所帶來的執行時開銷。