溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++算法之爬樓梯問題的代碼

發(fā)布時(shí)間:2020-07-06 03:38:20 來源:網(wǎng)絡(luò) 閱讀:700 作者:gougoude 欄目:編程語言

如下代碼是關(guān)于C++算法之爬樓梯問題的代碼。

{
if(layer <= 0)
return;

return;  

}

(2)判斷當(dāng)前的層數(shù)是為1或者是否為2

{
if(layer <= 0)
return;

if(layer == 1){  
    printf_layer_one(layer, stack, top);  
    return;  
}  

if(layer == 2){  
    printf_layer_two(layer, stack, top);  
    return;  
}  

return;  

}

(3)對(duì)于2中提及的打印函數(shù)進(jìn)行設(shè)計(jì),代碼補(bǔ)全

#define GENERAL_PRINT_MESSAGE(x)
do {
printf(#x);
printf("%d", stack[index]);
printf("n");
}while(0)

{
int index ;
GENERAL_PRINT_MESSAGE(1);
}

{
int index;

GENERAL_PRINT_MESSAGE(11);  
GENERAL_PRINT_MESSAGE(2);  

}

注:a)代碼中我們使用了宏,注意這是一個(gè)do{}while(0)的結(jié)構(gòu),同時(shí)我們對(duì)x進(jìn)行了字符串強(qiáng)轉(zhuǎn)b)當(dāng)剩下臺(tái)階為2的時(shí)候,此時(shí)有兩種情形,要么一次跳完;要么分兩次(4)當(dāng)階梯不為1或者2的時(shí)候,此時(shí)需要遞歸處理

{
jump_ladder(layer, stack, top);
}

{
if(layer <= 0)
return;

if(layer == 1){  
    printf_layer_one(layer, stack, top);  
    return;  
}  

if(layer == 2){  
    printf_layer_two(layer, stack, top);  
    return;  
}  

_jump_ladder(layer- 1, stack, top, 1);  
_jump_ladder(layer- 2, stack, top, 2);  

}

祝:這里在函數(shù)的結(jié)尾添加了一個(gè)函數(shù),主要是遞歸的時(shí)候需要向堆棧中保存一些數(shù)據(jù),為了代碼簡(jiǎn)練,我們重新定義了一個(gè)函數(shù)??偨Y(jié):1)這道題目和斐波那契數(shù)列十分類似,是一道地地道道的遞歸題目2)遞歸的函數(shù)也需要好好測(cè)試,使用不當(dāng),極容易堆棧溢出或者死循環(huán)。對(duì)此,我們可以按照參數(shù)從小到大的順序依次測(cè)試,比如說,可以測(cè)試樓梯為1、2、3的時(shí)候應(yīng)該怎么運(yùn)行,同時(shí)手算和程序相結(jié)合,不斷修正代碼,完善代碼。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI