関数の再帰と反復

836 ワード

再帰的な欠陥:より多くの回数のスタックプロセスを実行すると、演算量が過大になります.しかし、それぞれの末尾の再帰は循環と書くことができます(土ではないという言い方で反復します)
fabonacii数列は反復で実現されます.
#include<stdio.h>
int Fibonacii(int n)
{
    int temp = 0;
    int a = 1;//          
    int b = 1;
    if(n <= 2)
        return 1;
    while(n > 2)
    {
        temp = a + b;
        a = b;
        b = temp;//     a = temp; b = a;   a    !=1   b      
        n--;//  ab         
    }
    return temp;
}
int main()
{
    printf("%d
",Fibonacii(6)); return 0; }

反復による乗算:
#include<stdio.h>
int fac(int n)
{
    int ret = 1;
    while(n)
    {
        ret = ret * n;
        n--;// ret = 1*n,ret = n*(n-1) ....     
    }
    return ret;
}
int main()
{
    printf("%d
",fac(3)); return 0; }