-
函數的遞歸調用:在函數中調用自己
void func()
{
????????????func();
}
遞歸調用的三要素:
在遞歸調用中要設置好終止條件
遞歸很適合層級調用關系,每一層都執行相同的操作,關鍵是要提取出遞歸調用的核心要素
遞歸調用的參數列表表示給下一層調用需要傳遞什么,返回值表示上一層調用需要返回什么
利用遞歸的特性,可以很簡單得處理一些利用循環特別復雜的問題,例如,遍歷文件夾,遍歷二叉樹等。
查看全部 -
1.作用:將函數體直接在調用處展開
2.優點:沒有參數拷貝的過程,減少調用函數時的時間消耗
3.缺點:當一個函數過程要反復被調用時,不應定義為內聯函數,因為每調用一次內聯函數,就會展開一次代碼,這樣會使得代碼體積迅速膨脹
4.內聯函數實際上編譯器會幫你決定到底是否作為內聯函數
5.內聯函數與宏定義的區別:宏定義是在預編譯階段就進行了,只是做了簡單的文本替換,而內聯函數不僅會在調用處展開代碼,且該過程是在編譯階段進行,即編譯器會對參數類型,返回值類型做檢查
inline?int?add(int?__a,int?__b) { ????return?__a+__b;???? } int?main(int?argc,char**?argv) { ????int?a?=?5; ????int?b?=?6; ???int?c?=?add(a,b); ???return?0; } //等效于 int?main(int?argc,char**?argv) { ????int?a?=?5; ????int?b?=?6; ???int?c?=?a+b; ???return?0; }
查看全部 -
利用遞歸的特性,可以很簡單得處理一些利用循環特別復雜的問題,例如,遍歷文件夾,遍歷二叉樹等。靈活使用遞歸,將帶來極大的技術提升。
查看全部 -
參數傳遞(實參,形參),只是一個復制拷貝的過程,將實參賦值拷貝給形參,無論實參的數值還是地址。
查看全部 -
但是當要跳過的語句有好多行的時候,就會顯得特別不方便。因此,我們可以嘗試利用 do-while 語法來完成。
do {
? ?if(a == 12){
? ? ? ?break;
? ?}
? ?b = a + b;
} while(false);
b = a - b;這樣,我們將 do-while 和 break 進行配合,完成一個和循環無關的程序結構。
查看全部 -
while 和 for 的用途也不太一樣,for循環更適合循環次數比較確定的場景,例如數組遍歷等,而while 循環更適合不確定循環次數不確定的場景。
查看全部 -
switch 接受了一個變量 s,然后使用 case 語句,判斷變量 s 和哪個常量相等(case 后面只能是常量)
這就是 switch case 的特殊的地方,他在匹配到相應的 case 之后,會將后面所有的 case 從句都執行一次,直到碰到一個 break 語句。
查看全部 -
#include?<stdio.h> int?main(int?argc,char?**argv) { ????int?a?=?1; ????int?b?=?2; ????a?=a^b; ????b?=?a^b; ????a=?a^b; ????printf("a=%d,b=%d",a,b); ????return?0; }
查看全部 -
把數組初始化為非0值時,需要逐個賦值
查看全部 -
nullptr 是c++為描述空指針而提供的值,與NULL區別在于nullptr只能賦值給指針變量,NULL則可以賦值給整形等其他變量。兩者相較而言NULL可能會造成一些潛在的問題
查看全部 -
(int argc,char **argv)
第一個參數argc表示參數個數
第二個argv是參數組
int main
retum中main函數有返回值,返回值為0成功。非0為失敗
查看全部 -
用C++向世界問好
#include?<stdio.h>??//標準輸入輸出 int?main(int?argc,char?**argv)???//主函數,是程序的入口函數。一個程序里有且只有一個main函數 { ????printf("Hello?World!\n");???//stdio.h中包含printf功能 ????return?0; }
C++
#include?<iostream>?//iostream是C++里的io流的頭文件 int?main(int?argc,char?**argv) { ????std::cout?<<?"Hello?World!\n"?<<?std::endl;//C++的輸出風格 ????return?0; }
查看全部 -
#include <stdio.h>
int main()
{
? ? printf("int: %d\n",sizeof(int));
? ? return 0;
}
查看全部 -
練習1:使用函數來交換兩個數的值
#include?<iostream> int?exchange(int?*a,int?*b) {????int?c=*a;????*a=*b;????*b=c;??? ?} ?int?main(int?argc,char?**argv) ?{????int?x=5;???? ??????int?y=10;???? ??????std::cout<<"交換的前:"<<"x="<<x<<","<<"y="<<y<<std::endl;???? ??????exchange(&x,&y);???? ??????std::cout<<"交換后的:"<<"x="<<x<<","<<"y="<<y;???????? ??????return(0); ??}
練習2:利用遞歸來求一個數的階乘
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);???? ??????std::cout<<"5!="<<res;???? ??????return?0; ??}
查看全部 -
函數的遞歸調用:可以用來遍歷文件夾,遍歷二叉樹。
查看全部
舉報