函数递归
// // 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; }