//
// 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;
}
转载于:https://www.cnblogs.com/0515offer/p/4547162.html
转载请注明原文地址: https://win8.8miu.com/read-1541697.html