1. 程式人生 > 其它 >第三章-函式和遞迴3

第三章-函式和遞迴3

遞迴與迭代

遞迴:自己呼叫自己

迭代:重複(類似於迴圈)

#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
        return
n * 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. 當一個問題相當複雜,難以用迭代實現時,此時遞迴實現的簡潔性便可以補償它所帶來的執行時開銷。