递归函数的使用


1. 什么是函数递归
程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接
调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的主要思考方式在于:把大事化小。
2. 递归的两个必要条件
(1) 存在限制条件,当满足这个限制条件的时候,递归便不再继续。
(2) 每次递归调用之后越来越接近这个限制条件猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,不过瘾,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第十天,只剩下一个桃子。求第一天猴子摘的桃子个数。                                               
解题思路:
求倒数第n天有多少桃子,可以由第n-1天得到【2*(第n-1天桃子数+1)】
求倒数第n-1天有多少桃子,可以由第n-2天得到【2*(第n-2天桃子数+1)】
求倒数第n-2天有多少桃子,可以由第n-3天得到【2*(第n-3天桃子数+1)】
......
倒数第一天有多少桃子,由题目可以得到只有1个桃子
倒着由最后一天得出倒数第二天桃子数量最后求出第一天桃子数量(递)
第一天到第十天桃子数量(归)
代码:
#include <stdio.h>
int eatPeach(int day) {//递归操作
    if (day == 1) {//递归终止条件
        return 1;
    }
    return 2 * (eatPeach(day - 1) + 1);
}
int main() {
    int result;
    result = eatPeach(10);
    printf("共摘了%d个桃子", result);
    return 0;
}
求fib数列的第n项
代码:
#include <stdio.h>
int fib(int n) {
     int fibs[51] = { 0 };
     if (n == 1 || n == 0) {
         fibs[1] = fibs[2];
         return 1;
     }
if (fibs[n] == 0) {
    fibs[n] = fib(n - 1) + fib(n - 2);
}
return fibs[n];
    }
int main(){
    int num;
    printf("请输入所需计算斐波那契数列的项数:");
    scanf("%d", &num);
    int result;
    result = fib(num);
    printf("斐波那契数列第%d项的结果为:%d",num, result);
    return 0;
}
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值