首页 生活指南 正文内容

递归算法流程图(递归算法图解)

阿立指南 生活指南 2022-08-23 18:08:09 171 0

递归算法流程图如何画请以菲波那切数列递归算法为例

递归(recursion):程序调用自身的编程技巧。

递归满足2个条件:

1)有反复执行的过程(调用自身)

2)有跳出反复执行过程的条件(递归出口)

递归例子:

(1)阶乘

n! = n * (n-1) * (n-2) * ...* 1(n0)

//阶乘

int recursive(int i)

{

int sum = 0;

if (0 == i)

return (1);

else

sum = i * recursive(i-1);

return sum;

}

(2)河内塔问题

//河内塔

void hanoi(int n,int p1,int p2,int p3)

{

if(1==n)

cout"盘子从"p1"移到"p3endl;

else

{

hanoi(n-1,p1,p3,p2);

cout"盘子从"p1"移到"p3endl;

hanoi(n-1,p2,p1,p3);

}

}

(3)全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

如1,2,3三个元素的全排列为:

1,2,3

1,3,2

2,1,3

2,3,1

3,1,2

3,2,1

//全排列

inline void Swap(int a,int b)

{

int temp=a;

a=b;

b=temp;

}

void Perm(int list[],int k,int m)

{

if (k == m-1)

{

for(int i=0;im;i++)

{

printf("%d",list[i]);

}

printf("n");

}

else

{

for(int i=k;im;i++)

{

Swap(list[k],list[i]);

Perm(list,k+1,m);

Swap(list[k],list[i]);

}

}

}

递归算法流程图(递归算法图解) 第1张

汉诺塔问题的递归算法流程图

#include stdio.h

void hano(int n,char a,char b,char c)

{

if(n==1)

printf("\t将%d个盘片从%c移动到%c\n",n,a,c);

else {

hano(n-1,a,c,b);

printf("\t将第%d个盘片从%c移动到%c\n",n,a,c);

hano(n-1,b,a,c);

}

}

main()

{

int n;

printf("输入将要移动多少个盘子n:");

scanf("%d",n);

printf("递归结果:\n");

hano(n,'x','y','z');

}

java中递归算法是什么怎么算的?

一、递归算法基本思路:

Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。

二、递归算法解决问题的特点:

【1】递归就是方法里调用自身。

【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。

【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。

三、代码示例:

public class Factorial {

    //this is a recursive function

    int fact(int n){

        if (n==1) return 1;

        return fact(n-1)*n;

    }

     

}

     public class TestFactorial {

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        Factorial factorial=new Factorial();

        System.out.println("factorial(5)="+factorial.fact(5));

    }

}

代码执行流程图如下:

此程序中n=5就是程序的出口。

按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。

arrs[100000][100000];

a[100000];

f(i,zhi){

if(i==4){

arrs[]=a;

return;

}

a[i]=zhi;

f(i+1,zhi+3);

f(i+1,zhi+4);

}

f(0,0)

arrs就是结果,并且是排了序的。

递归算法的流程图怎么画

和普通函数的流程图没什么区别,就是在调用递归的时候做一个分支出来指向函数开始位置即可

欢迎 发表评论:

文章目录
    搜索
    111