函数递归

//

//  main.c

//  函数递归

//

//  Created by zhangxueming on 15/6/2.

//  Copyright (c) 2015年 zhangxueming. All rights reserved.

//



#include <stdio.h>

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

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

//1!=1; 0!=1



//函数递归: 一个函数直接或者的调用它自己, 称这个函数是递归定义的

//递归前进段  递归边界 递归后退段

//递归缺点: 占用内存空间大, 执行效率低



//5!

//func(5)

//5*func(4)

//4*func(3)

//3*func(2)

//2*func(1)



int func(int n)

{

    if (n==1||n==0) {

        return 1;

    }

    return n*func(n-1);

}



//1、斐波那契数列

//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);

}



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

//

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

//

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

//

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



int euclid(int a, int b)

{

    if (a%b==0) {

        return b;

    }

    return euclid(b,a%b);

}





//3、趣味问题——年龄。有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("%d\n", func(5));

    

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

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

//    }

//    printf("\n");

    

    //printf("最大公约数 = %d\n", euclid(319,377));

    

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

    return 0;

}

 

你可能感兴趣的:(递归)