-
遞歸的要點(diǎn)!!
查看全部 -
函數(shù)的遞歸調(diào)用:
1、要知道遞歸的終止條件是什么,比如本題的是當(dāng)n = 1時(shí);
查看全部 -
參數(shù)列表 的寫法是? 類型+參數(shù)名稱,每個(gè)參數(shù)之間用逗號(hào)隔開;
參數(shù)可以是任意類型,可以是基礎(chǔ)數(shù)據(jù)類型,指針,也可以是結(jié)構(gòu)體類型。
查看全部 -
//定義函數(shù),然后再調(diào)用函數(shù)
int avg( int a, int b)
{
? ? ? return ( a + b )/2;
}
//我們?cè)趯?shí)現(xiàn)函數(shù)體的調(diào)用,必須在調(diào)用之前進(jìn)行聲明。
查看全部 -
#include <stdio.h>
int main(int argc,char **argv)
{
? ?printf("Hello World!\n");
? ?return 0;
}查看全部 -
定義結(jié)構(gòu)體
struct student
student可改
查看全部 -
整數(shù)
char,short,int,long,long long
無符號(hào)unsigned
浮點(diǎn)float double
查看全部 -
把一個(gè)函數(shù)變成內(nèi)聯(lián)函數(shù)呢?只需要在函數(shù)前面加 inline 關(guān)鍵字就可以了。
int add(int a, int b);
inline int add(int a, int b)
{
? ?return a + b;
}
內(nèi)聯(lián)函數(shù)有好處,就是可以節(jié)省調(diào)用時(shí)候的額外開銷。但是同時(shí)也會(huì)造成另外的問題,內(nèi)聯(lián)是以代碼膨脹為代價(jià)而進(jìn)行的優(yōu)化,而如果一個(gè)函數(shù)過長,或者一個(gè)函數(shù)被調(diào)用了好多次,那么顯然就不是適合使用內(nèi)聯(lián)函數(shù)優(yōu)化。查看全部 -
以,如果要使用這種自己調(diào)用自己的方式,就需要滿足一定的條件。已經(jīng)有前人為我們總結(jié)出了遞歸調(diào)用的三要素,如下:
?
1. 遞歸的終止條件是什么?
這是非常重要的,在遞歸中,我們必須要設(shè)計(jì)好這一點(diǎn),那就是遞歸什么時(shí)候停止。否則就會(huì)像前面的例子一樣,直接爆棧。
?
2. 遞歸被分解后最基本操作是什么?
遞歸非常適合層級(jí)調(diào)用關(guān)系,每一層都執(zhí)行相同的操作,這個(gè)要素,就是要提取出遞歸最核心的要素。
?
3. 遞歸調(diào)用傳遞的參數(shù)
#include<stdio.h>
int fact(int n)
{
??? if(n==1) {
??????? return 1;
??? }
??? else {
??????? return n * fact(n-1);
??? }
}
int main(int argc,char **argv)
{
??? int x = 5;
??? int res = fact(x);
??? printf("%d\n",res);
??? return 0;
}這里傳遞的參數(shù)其實(shí)除了參數(shù)列表,還包括返回值。參數(shù)列表表示給下一層調(diào)用需要傳遞什么,返回值表示上一層調(diào)用需要返回什么
查看全部 -
#include <stdio.h>
//定義函數(shù)
int avg(int a, int b)
{
? ?return a + b / 2;
}
int main(int argc,char **argv)
{
? ?int a = 10;
? ?int b = 20;
? ?int c = avg(a, b); //函數(shù)調(diào)用
? ?return 0;
}查看全部 -
int length = 100;
int array[length];
int target = 10;
for(int i=0;i<length;i++) {
? ?if(array[i] == target) {
? ? ? ?// 找到了
? ?}
}continue
int length = 100;
int array[length];
int target = 10;
for(int i=0;i<length;i++) {
? ?if(array[i] == target) {
? ? ? ?continue;
? ?}
? ?printf("array[%d]: %d\n", i, array[i]);
}在這段程序中,當(dāng) array[i] == target 的時(shí)候,會(huì)執(zhí)行 continue 語句,跳出本次循環(huán),而進(jìn)入下一次循環(huán),所以本次的 printf 不會(huì)被打印,而下一次會(huì)繼續(xù)打印。
查看全部 -
#include<stdio.h>
int main(int argc,char**argv)
{
?? int array[100];
for(int i=0;i<100;i++){
??? printf("array[%d]: %d\n", i, array[i]);
}
}查看全部 -
#include <stdio.h>
int main(int argc,char **argv)
{
? ?int * p = (int *)malloc(5 * sizeof(int));
? ?free(p);
? ?return 0;
}
查看全部 -
#include <stdio.h>
int main(int argc,char **argv)
{
??? int array[5];
??? *(array + 2) = 1;//等價(jià)于array【2】=1
??? return 0;
}查看全部 -
#include<stdlib.h>
p=(int*)malloc(4)//堆內(nèi)存首地址在棧內(nèi)存上
查看全部 -
enum枚舉
enum Week
{
? ?Mon, // 星期一
? ?Tue, // 星期二
? ?Wed, // 星期三
? ?Thu, // 星期四
? ?Fri, // 星期五
? ?Sat, // 星期六
? ?Sun, // 星期日
};
int main(int argc,char **argv)
{
? ?Week week = Week::Fri;
? ?return 0;
}查看全部
舉報(bào)