如何使用C语言实现递归调用

来源:互联网 发布:港澳游怎么样知乎 编辑:程序博客网 时间:2024/06/06 04:43

递归的定义:

程序调用自身的编程技巧称为递归,就是运行时调用了自己。

什么样的问题适合使用递归方式:

如果一个大问题可以拆分成几个小问题,其中有n个小问题和原来的大问题本质一样,只是难度小一些。这种问题可以考虑采用递归的方式解决。


递归函数的编码原则:

1、编写语句把问题的拆分方式描述出来。

2、在函数的开头写一个分支语句处理不可拆分的情况(这个分支必须可以让函数结束)


下面讲解几个例子了解什么是递归。


例一:古典问题——有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第三年每个月的兔子总数为多少?(提示:兔子的规律为数列1,1,2,3,5,8,13,21....)

PS:如果生的都是公兔子或者母兔子就不用算了,不知道大家有没有想过,想到过的请举手!

月份12345678910小兔子101123581321大兔子0112358132134总数11235813213455
通过表格分析,可以看出:

F(n) = F(n-1) + F(n-2);

#includeint fei(int num){    if(num <= 2){        return;    }    return fei(num - 1) + fei(num - 2);}int main(){    int num1 = 0;    printf("请输入第三年的月份:\n");    scanf("%d",&num1);    printf("第三年第%d个月生%d只兔子",num1,fei(36 + num1));    return 0;}


例二:趣味问题——年龄。有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

#includeint age(int num){    if(num == 1){        return 10;    }    return age(num - 1) + 2;}int main(){    printf("第5个人的年龄是%d\n",age(5));    return 0;}


例三:趣味问题——猴子吃桃。海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

#includeint peach(int num){    if(num == 1){        return 6;    }     return ((peach(num - 1) + 1) * 5);   }int main(){    printf("总共有桃子数为:%d\n",peach(5));    return 0;}

原创粉丝点击