递归的基本思想总结

概念



递归就是某个函数直接或间接调用自身的问题求解过程。

通过将自身问题划分成相同性质的子问题的求解过程,这些小问题的求解过程较容易,小问题的解就构成了原问题的解。



步骤


1.理解题意,待求问题的解F(X)

2.通过寻找函数G(),使得F(X)=G(F(X-1))  (原解可以用一些子问题的解来表示,寻找递推关系式)

3.且已知F(0)的值,就可以通过F(0)和G()来求F(X)的解


要点


1.如何将原问题划分成子问题

2.递归终止的条件,最小子问题的求解,允许有多个出口

3.界函数,它保证递归的规模向出口靠拢


关键


1.找出递推关系式

2.找到递归终止条件

注:深层次的递归可能导致栈溢出,可以考虑使用全局数组或动态分配数组


举例


求N的阶乘

<1>非递归

#include <iostream>
using namespace std;
int main()
{
    int n;
    int count=1;
    cin>>n;
    for (int i=2; i<=n; i++) {
        count*=i;
    }
    cout<<count<<endl;
}


<2>递归

递推关系式   f(x)=x*f(x-1)  
终止条件      乘到1后,x-1=0,结束递归返回1

#include <iostream>
using namespace std;
int f(int x)
{
    if (x==0)
        return 1;
    else
        return x*f(x-1);
}
int main()
{
    int n;
    cin>>n;
    int count=f(n);
    cout<<count<<endl;
}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值