函数递归简单原理

什么是递归?

程序调用自身的编程技巧称为递归( recursion),递归做为一种算法在程序设计语言中广泛应用。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小

递归函数中的二个必要条件

  1. 递归函数必须有结束条件和递推关系
  2. 函数不断递归不断接近这个结束条件,直到接触到这个结束条件,值返回。

列题

1. 理解关于递归函数的原理

 1. #include"stdio.h"
 2. void print(int n)
 3. {
 4. if(n>9)//结束条件
 5. {
 6. print(n\10);//递推关系
 7. }
 8. printf("%d\n",n%10);
 9. }
 10. int mian()
 11. int num=1234;
 12. print("num");
 13. return 0;`

在这里插入图片描述

先执行递推,当n小于9时返回1,再回推将计算并返回。由此可以看出递归函数必须有结束条件。
最终可以总结一句话就是先进后出

2. 计算n的介乘

#include <stdio.h> 
int factorial(int n)
{
 if (n==0 || n==1)
    {
        result = 1;  //结束条件
    }
    else
    {
        result = factorial(n-1) * n;  //递推关系
    }
    return result;
}
int main()
{
    int n = 5;//输入数字5,计算5的阶乘
    printf("%d的阶乘=%d",n,factorial(n));
    return 0;
}

在这里插入图片描述
同样是先进后出

3. 斐波那契数列

斐波那契数列指的是这样一个数列:
0, 1, 1, 2, 3, 5, 8, 13, 21, ···
代码如下

#include"stdio.h
int fibonacci(int num)
{
if(n==1||n==2)//返回值
return 1;
else
return fibonacci(n-2)+fibonacci(n-1);//递堆关系
}
int mian()
{
int n
printf("%d",输入一个正整数n);
scanf("%d",&n);
printf( fibonacci( n ) );
}

提示:

  1. 许多问题是以递归的形式进行解释的,这只是因为它比非递归的形式更为清晰。
  2. 但是这些问题的迭代实现往往比递归实现效率更高,虽然代码的可读性稍微差些。
  3. 当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邋遢道长!

谢谢,大哥

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值