iOS-C_Day6___递归

2015.1.27

函数递归:一个函数直接或者间接在函数内调用自己,称这个函数是递归定义的;

 

//n! = n*(n-1)!

//5! = 5*4!

//4! = 4*3!

//3! = 3*2!

//2! = 2*1!

//1! = 1;  //base case

 

//递归通常分为三个阶段: 递归前进段,递归边界条件,递归后退段

 

//long func(int n)//

//{

//    if (n==1) {//递归退出条件

//        return 1;

//    }

//    return n*func(n-1);

//}

//

//int main(int argc, const char * argv[]) {

//    

//    printf("%ld\n", func(12));

//    

//    return 0;

//}

 

 

//斐波那契数列

//1 1 2 3 5 8 13 21 34 55 89 144 ....

 

//int feibonaqi(int n)

//{

//    if (n==1 || n==2) {

//        return 1;

//    }

//    return feibonaqi(n-1)+feibonaqi(n-2);

//}

//

//int main(int argc,const char *argv[])

//{

//    for (int i=1; i<=40; i++) {

//        printf("%d ", feibonaqi(i));

//    }

//    printf("\n");

//    return 0;

//}

 

//1、编写递归函数求两个正整数a和b的最大公约数(GCD,Greatest Common Divisor),使用Euclid算法:

//

//如果a除以b能整除,则最大公约数是b。

//

//否则,最大公约数等于b和a%b的最大公约数。

//

//Euclid算法是很容易证明的,请读者自己证明一下为什么这么算就能算出最大公约数。最后,修改你的程序使之适用于所有整数,而不仅仅是正整数。

 

//int euclid(int a, int b)

//{

//    if (!(a%b)) {

//        return b;

//    }

//    return euclid(b, a%b);

//}

//

//int main(int argc,const char *argv[])

//{

//

//    printf("%d\n", euclid(319, 377));

//    return 0;

//}

 

//2、  趣味问题——年龄。有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?用递归算法实现。

 

int age(int n)

{

    if (n==1) {

        return 10;

    }

    return age(n-1)+2;

}

 

int main(int argc, const char *argv[])

{

    printf("age = %d\n", age(6));

    return 0;

}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。