美文网首页
递归算法

递归算法

作者: 过气海豹 | 来源:发表于2021-03-25 11:40 被阅读0次

1.基础概念

1.一个函数调用其自身,就是递归
2.递归和普通函数调用一样是通过栈实现的
3.树与二叉树适合使用递归的形式来表述
4.算法分为基础步和归纳步

递归算法的一般性原则

递归算法是将归纳法的思想应用于算法设计之中,递归算法充分地利用了计算机系统内部机能,自动实现调用过程中对于相关且必要地信息的保存与回复

递归能够解决的问题所具有的特征

(1)问题的描述涉及规模
(2)问题的规模发生变化后,解决问题的方法完全相同,并且原问题的解由小规模问题的解构成
(3)小规模的问题是可以求解的(在有限步内可以停机)

2.典型问题

1.求阶乘

输入:n
输出:n!

int factorial(int n)
{
  if(n==0)
    return 1;
  else return n*factorial(n-1); 
}

2.汉诺塔

输入:盘子的个数n、柱子的名称a,b,c
输出:移动方案

#include<stdio.h>

void hanoi(int n,char a, char b, char c)
{
    if(n==1)
    printf("%c->%c\n",a,c);
    else 
    {
    hanoi(n-1,a,c,b);
    printf("%c->%c\n",a,c);
    hanoi(n-1,b,a,c);
    }
}
int main()
{
    int n;
    char A='A',B='B',C='C';
    scanf("%d",&n);
    hanoi(n,A,B,C);
    return 0;
} 

3.斐波那契数列

输入:位数n
输出:斐波那契数列第n位的值

int fbnq(int n)
{
     if(n==1||n==2)
        return 1;
    else
        return fbnq(n-1)+fbnq(n-2);
 } 
int main()
{
    int n,re;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
    re = fbnq(i);
    printf("%d ",re);
    }
    return 0;
}

4.下楼梯

有n阶楼梯,每次只能下一个或者两个,计算一共有多少种下楼方法

int xlt(int n)
{
    if(n==0||n==1)return 1;
    return xlt(n-1)+xlt(n-2)+xlt(n-3);
}

5.分治算法求n个元素的最大值和最小值

算法思想:
1.将n个数均分为s1和s2
2.分别求解s1和s2的最大值和最小值
s1最大值为max1,s1最小值为min1
s2最大值为max2,s2最小值为min2
3.计算min(min1,min2),max(max1,max2)

 
void Maxmin(int a[],int l,int r,int &x,int &y)
{
    if(l==r)///只有一个数的情况
    {
        x=a[l],y=a[l];
        return;
    }
    if(r-l==1)///只有两个数的情况
    {
        if(a[l]<a[r])
        {
            x=a[l],y=a[r];
        }
        else
        {
            x=a[r],y=a[l];
        }
    }
    else
    {
        int mid=(l+r)/2;
        int x1,y1,x2,y2;
        Maxmin(a,l,mid,x1,y1);
        Maxmin(a,mid+1,r,x2,y2);
        x=min(x1,x2);
        y=max(y1,y2);
    }
}

相关文章

  • 快速幂模板

    递归算法 非递归算法

  • python递归算法、尾递归算法及优化

    文章概述 递归算法和尾递归概述递归算法的优化 递归算法 介绍:递归算法是计算机编程领域非常重要的一种算法,采用分而...

  • C++ 递归算法

    递归算法,尾递归算法求阶乘!

  • Java递归算法详解

    递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的...

  • 矩阵链乘法

    递归算法: 迭代算法: 分析 递归算法:规模为n的问题,有n个递归,每个递归又有相应矩阵个数个递归,故T(n)=T...

  • 【Python】(十一)从汉诺塔看Python中的递归问题

    递归的原则 递归算法必须具有基本情况。 递归算法必须改变其状态并向基本情况靠近。 递归算法必须以递归方式调用自身 ...

  • 一、算法

    目标 递归算法查找算法算法分析十大排序算法 递归算法 什么是递归递归,在数学与计算机科学中,是指在函数的定义中使用...

  • 欧几里得算法

    非递归算法 默认输入 m>=n 递归算法

  • 递归、回溯、分治

    递归 (1)子集 方式一:递归算法 方式二:位运算算法 (2)子集II 方法一:递归算法 方法二:位运算 (3)组...

  • 二叉树三种遍历的实现(递归)

    前序递归遍历算法:访问根结点-->递归遍历根结点的左子树-->递归遍历根结点的右子树 中序递归遍历算法:递归遍历根...

网友评论

      本文标题:递归算法

      本文链接:https://www.haomeiwen.com/subject/atnwcltx.html