递归算法

Posted geziyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归算法相关的知识,希望对你有一定的参考价值。

递归算法是一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型而复杂的问题晨晨转化成与原问题相似的,规模较小的问题来解决,一般来说,递归需要边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进,当递归条件满足时,递归返回。在使用递归时必须要有明确的结束条件,称为递归出口,否则递归将无限的进行下去(死锁)

1、菲波那切数列(顺推)

Fibonacci数列是递归数列,它的每一项都等于前两项和,在生物学中,许多生物现象都存在菲波那切数列的规律

//打印输出20以内的Fibonacci数列 
#include<stdio.h>
int main(){
    int fib[20]={1,1};
    for(int i = 2; i < 20; i++){
        fib[i] = fib[i-1] + fib[i-2];
    }
    for(int i = 0; i < 20; i++){
        printf("%d ",fib[i]);
    }
    printf("
");
    return 0;
} 

技术分享图片

2、递归逆推算法实现

例子:父亲准备一次性凑齐儿子的大学四年学费,然后儿子采用整存领取的方式,每月的月底取出1000元,准备下个月的开支,假设银行的年利息为1.71%,求出父亲最初需要一次性存多少钱,才能保证儿子大学四年的生活开支。

//递归逆推
#include<stdio.h>
#define FETCH 1000
#define PATE 0.0171
int main(){
    double corpus[49];
    corpus[48] = (double)FETCH;
    for(int i = 47; i > 0; i--){
        corpus[i] = (corpus[i+1]+FETCH)/(1+PATE/12);
    }
    printf("父亲需要一次性准备:%.2f元
",corpus[1]);
    return 0;
}

技术分享图片

 

以上是关于递归算法的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript - 代码片段,Snippets,Gist

以下代码片段的算法复杂度

有人可以解释啥是 SVN 平分算法吗?理论上和通过代码片段[重复]

片段(Java) | 机试题+算法思路+考点+代码解析 2023

CSP核心代码片段记录

算法漫游指北(第十篇):泛型递归递归代码模板递归思维要点分治算法回溯算法