• 首页>范文 > 范文
  • 递归怎么写

    1.如何写递归函数

    一句话搞掂.

    如果一个函数里面包含了一个步骤,这个步骤的里面的步骤是和这个函数的所有步骤是一致的,那么这个函数就是递归函数.理解了我这句话,递归算法的应用就不是问题了.

    写递归函数第一步是分析问题,分析问题是否存在"一个函数里面包含了一个步骤,这个步骤的里面的步骤是和这个函数的所有步骤是一致的"这种关系,如果存在,使用递归函数必定是成功的,因为它就是递归函数的定义的阐发.

    看我分析最经典的汉诺塔问题:

    将n个盘从第1个柱子移到第3个柱子需要三步完成,换句话说,这个移盘函数---用f来表示,它由三步完成.

    1. 将n-1个盘从第1个柱子移到第2个柱子.

    2. 将1个盘从第1个柱子移到第3个柱子

    3. 将n-1个盘从第2个柱子移到第3个柱子.

    关键的地方到了,如果一个函数里面包含了一个步骤,这个步骤的里面的步骤是和这个函数的所有步骤是一致的,

    看第1个步骤,将n-1个盘从第1个柱子移到第2个柱子,我们暂时用g来表示,等下你会发现f=g的.

    这个步骤也是由3个步骤来完成的:

    1.将n-2个盘从第1个柱子移到第3个柱子.

    2.将1个盘从第1个柱子移到第2个柱子

    3.将n-2个盘从第3个柱子移到第2个柱子.

    首先"将n-1个盘从第1个柱子移到第2个柱子" 是 "将n个盘从第1个柱子移到第3个柱子" 的一个步骤.

    其次"将n-1个盘从第1个柱子移到第2个柱子" 这个步骤 包含的步骤 是和 "将n个盘从第1个柱子移到第3个柱子"这个函数的步骤是一致的(都是三步),只是柱子的位置不同而已,这里的位置和函数的参数是等价的,因此,位置不同,就是函数参数值不同而已,函数的参数个数就等价于柱子的个数.换句话说,f和g的步骤和参数是一致的,只是实参不同而已,因此f=g的.这里面涉及到一点抽象思维,只能靠自己去理解了.

    因此,如果用f(n,a,b,c)表示将n个盘从第1个柱子移到第3个柱子的话,那么,将n-1个盘从第1个柱子移到第2个柱子,就可以用f(n-1,a,c,b)表示了,为什么?因为上述已经分析过了,步骤是一致的,参数的个数是一致的,只是参数的值不同而已.

    我总结了一个最快完成递归函数的方法,做一道题大概5分钟左右.

    1. 当n时,需要的步骤,列出来

    2. 当n-1时,需要的步骤,列出来.

    比较上述两者的共性:1.步骤是一致的,2.参数的个数是一致的

    如果满足上述两者,就将n-1的步骤就n的步骤代替,这样就ok了.

    2.c语言递归排序怎么写、

    #include<stdio.h>

    void main(){

    int a,b;

    printf(“请输入所求阶乘的数a:n");

    scanf("%d",&a);

    fun(&a);

    printf("所得a的阶乘为:n”);

    int fun(int a){

    int a;

    if(a==0)

    a=1;

    esle

    a=fun(n)*fun(n-1);

    return a;

    }

    }

    试一下吧,生疏了

    3.用c语言的递归怎么来写选择排序

    选择排序的递归算法

    #include

    select(int a[8],int m,int n)

    {

    int i,t,k;

    k=m;

    for(i=m+1;iif(a[k]>a[i])

    k=i;

    if(k!=m)

    {

    t=a[k];

    a[k]=a[m];

    a[m]=t;

    }

    if(mselect(a,m+1,n);

    }

    main()

    {

    int a[10]={46,55,13,42,94,17,05,70};

    int i;

    select(a,0,8);

    for(i=0;iprintf("%4d",a[i]);

    printf("n");

    }

    4.递归程序如何写,要满足三个条件,切记

    以 C 语言为例,举一个最最经典的例子就是:计算一个整数的阶乘。

    #include

    int my_jiecheng( int ) ;

    int main( )

    {

    int num, result = 0 ;

    scanf("%d", &num) ;

    result = my_jiecheng(num) ;

    printf("result = %dn", result ) ;

    return 0 ;

    }

    int my_jiecheng( n )

    {

    if( n == 1 )

    return (1) ;

    else

    return( n * my_jiecheng(n-1) ) ;

    }

    发表评论

    登录后才能评论