递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。直到某一条件跳出!
例1、计算5的阶乘
例2、
#include <stdio.h>
/* 定义获取单词数量的函数 */
int getWordNumber(int n)
{ if(n == 1){return 1; //第一天只会1个单词}else{return getWordNumber(n-1)+n ; //到第n天会的单词数量}
}
int main()
{int num = getWordNumber(10); //获取会了的单词数量printf("小明第10天记了:%d个单词。\n", num);return 0;
}
例3、猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。
#include <stdio.h>
int getPeachNumber(n)
{int num; if(n==10){return 1 ; //递归结束条件} else{num = (getPeachNumber(n+1)+1)*2; printf("第%d天所剩桃子%d个\n",n, num); }return num;
}
int main()
{int num = getPeachNumber(1);printf("猴子第一天摘了:%d个桃子。\n", num);return 0;
}
例4、有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2人大两岁。问第2个人,说比第1个人大两岁。最后 问第1个人,他说是10岁。请问第5个人多大?
程序分析:
利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人岁数,需知道第4人的岁数,依次类推,推到第1人(10岁),再往回推。
#include <stdio.h>
int getAge(n)
{int num; if (n == 1){return 10; //递归结束条件}else{num = getAge(n-1) +2; printf("第%d个人的年纪是%d\n", n, num); }return num;
}
int main()
{int num = getAge(5);printf("第5个人%d岁了\n", num);return 0;
}
例5、喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以多少汽水。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int Capsule(n)//num 每次的瓶盖数.n 每次喝到的饮料.sum 一共喝到的饮料
{int sum;if (n < 1){return 1;}else {sum = Capsule(n/2) +n;}return sum;
}
int main(void)
{int n = 20;//喝的汽水的数量printf("所喝汽水的数量为%d\n",Capsule(n));
}