我的递归基础练习(未完)

1.首先是阶乘的递归算法:

#include <stdlib.h>

int recursion(int i)
{
    int sum;
    if(i==0)//递归的终止条件
    {
        sum=1;
    }
    else
    {
        sum=recursion(i-1)*i;//开始递归调用
    }
    return sum;
}


int main(int argc,char argv[])
{
    int i;
    for(i=5;i>0;i--)
    {
        printf("%d的递归是%d \n",i,recursion(i));
    }
}

代码解释就不说了。

递归函数的调用,和一般函数的调用是一样。当程序调用一个函数时,先将当前的运行状态保留以便程序运行玩函数调用后,能够恢复到原来的状态继续运行。


2.递归的链表创建和输出

#include <stdlib.h>

struct list
{
    int data;
    struct list *next;
};
typedef struct list node;
typedef node *link;

//递归链表输出函数
void print_list(link ptr)
{
    if(ptr !=NULL)
    {
        printf("[%d]",ptr->data);
        print_list(ptr->next);//递归链表输出函数调用
    }
}

//递归链表创建函数
link create_list(int *array,int len,int pos)
{
    link head;//链表结点的指针
    if(pos==len)
    {
        return NULL;    //终止条件  
    }
    else
    {
        //创建结点内存
        head=(link)malloc(sizeof(node));
        if(!head)
        {
            return NULL;
        }
        head->data=array[pos];
        head->next=create_list(array,len,pos+1);
        return head;
    }
}

int main(int argc,char *arv[])
{
    int list[6]={1,2,3,4,5,6};
    link head;
    
    head=create_list(list,6,0);
    if(!head)
    {
        printf("内存分配失败! \n");
        exit(1);
    }
    printf("链表的内容:\n");
    print_list(head);
    printf("\n");
}

知道如何修改上述代码,逆向输出链表吗?


3.你充10元,你的上级得到5元,你的上上级得到3元,你的上上上级得到1元

posted @ 2011-11-28 11:47  草珊瑚  阅读(266)  评论(0)    收藏  举报