欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

五、遞歸與常見問題

一、函數(shù)調(diào)用時(shí)的棧

函數(shù)調(diào)用時(shí)的棧
程序中的“函數(shù)調(diào)用?!笔菞?shù)據(jù)結(jié)構(gòu)的一種應(yīng)用
函數(shù)調(diào)用棧一般是從高地址向低地址增長的
?棧底為內(nèi)存的高地址處
?棧頂為內(nèi)存的低地址處
函數(shù)調(diào)用棧中存儲的數(shù)據(jù)為活動記錄
五、遞歸與常見問題
程序中的棧
在不斷的壓棧過程中造成棧空間耗盡而產(chǎn)生棧溢出
棧溢出常由于函數(shù)遞歸過深或局部數(shù)組過大造成

目前成都創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、夏邑網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

二、遞歸的應(yīng)用

?遞歸是一種數(shù)學(xué)上分而自治的思想
遞歸將大型復(fù)雜問題轉(zhuǎn)化為與原問題相同但規(guī)模較小的問題進(jìn)行處理
遞歸需要有邊界條件
?當(dāng)邊界條件不滿足時(shí),遞歸繼續(xù)進(jìn)行
?當(dāng)邊界條件滿足時(shí),遞歸停止
斐波拉切數(shù)列
斐波納契數(shù)列以如下被以遞推的方法定義:F(1)=1,F(xiàn)(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

int fibolac(int n)
{
    if((1 == n)||(2 == n))
    {
        return 1;   
    }
    else
    {
        return fibolac(n-1)+fibolac(n-2);
    }

}

字符串長度
求取字符串長度可使用遞歸的方式來求取

int string_len(const char* p)
{
    if(p == NULL)
    {
        return -1;
    }
    else if(*p == '\0')
    {
        return 0; 
    }
    else
    {
        return string_len(p+1) + 1; 
    }
}

全排列
假設(shè)集合是{a,b,c},那么這個(gè)集合中元素的全部排列是{(a,b,c),(a,c,b),(b,a,c),(b,c,a),(c,a,b),(c,b,a)},顯然,給定n個(gè)元素共同擁有n!種不同的排列,假設(shè)給定集合是{a,b,c,d},能夠用以下給出的簡單算法產(chǎn)生其全部排列,即集合(a,b,c,d)的全部排列有以下的排列組成
以a開頭后面跟著(b,c,d)的排列
以b開頭后面跟著(a,c,d)的排列
以c開頭后面跟著(a,b,d)的排列
以d開頭后面跟著(a,b,c)的排列

int permutation(char s[],int b,int e)
{
    if((b>=0) && (b<=e))
    {
        if(b == e)
        {
            printf("%s\n",s);
        }
        else
        {
            int i = 0;
            for(i = b; i<=e; i++)
            {
                if(isswap(s,b,i))           //去重的全排列就是從第一個(gè)數(shù)字起每個(gè)數(shù)分別與它后面非重復(fù)出現(xiàn)的數(shù)字交換
                {
                    char c = s[b];          //交換位置
                    s[b] = s[i];
                    s[i] = c;
                    permutation(s,b+1,e);

                    c = s[b];              //交換位置
                    s[b] = s[i];
                    s[i] = c;
                }
            }
        }
    }
} 

漢諾塔問題
該游戲是在一塊銅板裝置上,有三根桿(編號A、B、C),在A桿自下而上、由大到小按順序放置64個(gè)金盤。游戲的目標(biāo):把A桿上的金盤全部移到C桿上,并仍保持原有順序疊好。操作規(guī)則:每次只能移動一個(gè)盤子,并且在移動過程中三根桿上都始終保持大盤在下,小盤在上,操作過程中盤子可以置于A、B、C任一桿上。
五、遞歸與常見問題

/*
   n:需要移動的盤子數(shù)量
   a:起始位置
   b:需要借助的柱子 
   c:需要移動到的柱子 
*/
int hannoi(int n, char a, char b, char c)
{
    if(1 == n)
    {
        printf("%c-->%c\n",a,c);
    }
    else
    {
        hannoi(n-1, a, c, b);
        printf("%c-->%c\n",a,c);
        hannoi(n-1, b, a, c);
    }
    return 0;
} 

八皇后問題
八皇后問題,是一個(gè)古老而著名的問題,是回溯算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾于1848年提出:在8×8格的國際象棋上擺放八個(gè)皇后,使其不能互相,即任意兩個(gè)皇后都不能處于同一行、同一列或同一斜線上,問有多少種擺法。

#define N 8

typedef struct _tag_Pos
{
    int ios;
    int jos;
} Pos;                     //位置檢查 

static char board[N+2][N+2];
static Pos pos[] = { {-1, -1}, {-1, 0}, {-1, 1} };     //偏移位置 
static int count = 0;                                  //符合要求的個(gè)數(shù) 

void display()
{
    int i = 0;
    int j = 1;

    for(i=0; i<N+2; i++)
    {
        for(j=0; j<N+2; j++)
        {
            printf("%c", board[i][j]);
        }

        printf("\n");
    }
}

void init_queen()
{
    int i,j;
    for(i=0;i<N+2;i++)
    {
        board[0][i] = '#';
        board[i][0] = '#';
        board[N+1][i] = '#';
        board[i][N+1] = '#';    
    }

    display();
}

int check(int i,int j)
{
    int ret = 1;
    int p = 0;

    for(p=0; p<3; p++)
    {
        int ni = i;
        int nj = j;

        while( ret && (board[ni][nj] != '#') )
        {
            ni = ni + pos[p].ios;
            nj = nj + pos[p].jos;

            ret = ret && (board[ni][nj] != '*');
        }
    }
    return ret; 
}

int find(int i)                       //查找的第i行 
{
    int j;
    if(i > N)
    {
        count++;
        printf("Solution: %d\n", count);
        display();                   //顯示 
        getchar(); 
    }
    else
    {
        for(j=1;j<=N;j++)
        {
            if(check(i,j))
            {
                board[i][j] = '*';          
                find(i+1);
                board[i][j] = ' ';            //????
            }   
        }   
    } 
}

數(shù)字的分解問題

輸出正整數(shù)和等于n的所有不增的正整數(shù)和式,如:
4=4
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1

a:用于存放分解的數(shù)
n:需要分解的數(shù)的和
k:分解的深度 
int integer_fac(int a[],int n,int k)
{
    int j,p;
    for(j=n; j>=1; j--)
    {
        if(j <= a[k-1])
        {
            a[k] = j;
            if(j == n)
            {
                printf("%d = %d",a[0],a[1]);
                for(p=2;p<=k;p++)
                {
                    printf("+%d",a[p]);
                }
                printf("\n");
            } 
            else
            {
                integer_fac(a,n-j, k+1);
            }   
        }
    }  
    return 0;
} 

網(wǎng)頁題目:五、遞歸與常見問題
文章起源:http://aaarwkj.com/article24/jeicce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站網(wǎng)站維護(hù)、網(wǎng)站營銷、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營
日韩亚洲精品99综合观看| 亚欧成人永久免费视频| 2021天天操夜夜爽| 欧美日韩一级一区二区| 中文字幕91在线播放| 久久精品一区二区三区乱码| 国内成人免费在线视频| 日本欧美一区二区精品| 四虎精品国产一区二区三区| 伊人色综合久久天天五月婷| 亚洲欧美日韩国产桃色| 朋友的尤物人妻中文字幕| 日本老太老熟妇一级特黄| 91国内偷拍富婆国内精品对白| 一区二区三区日韩国产电影 | 亚洲美腿丝袜综合在线| 精品一二三四五区亚洲乱码| 一区二区三区蜜桃av| 97视频精品全部免费观看| 欧美激情欧美精品欧美色浮| 亚洲三级黄片在线观看| 日本熟女视频中文字幕| 日本韩国欧美一区在线| 日本在线高清精品人妻| 992免费影院 在线观看| 伊人久久亚洲福利精品| 亚洲综合一区二区精品久久| 九九热这里只有免费精品| 国产精品亚洲国产精品| 色婷婷一区二区三区影片| 亚洲一区二区三区免费在线看| 爱我久久视频网免费视频| 欧美精品黄片免费在线观看| 色播五月麻豆激情综合网| 日韩国产传媒在线精品| 国产日韩精品一区二区在线 | 国产欧洲日本一区二区| 色婷婷综合激情一区二区| 亚洲成人大片免费在线观看| 国产美女直播亚洲一区色| 亚洲一区二区三区精品国产|