C中的遞迴問題

來源:互聯網
上載者:User

標籤:遞迴   c語言   迭代   記憶體   

在C語言中,所有的執行語句都只能出現在函數之中。同樣,函數的調用也只能出現在某函數的函數體內。函數的調用以兩種方式出現:函數的嵌套與函數的遞迴。  C語言中,所有函數的定義都是互相平行和獨立的,一個函數的定義不能包含另一個函數的定義,即不允許函數的嵌套定義。但函數的調用可以通過用一個函數另一個函數來實現,這就形成了函數的嵌套定義!C語言不限制嵌套的個數和層數,這樣我們就可以自由,合理的組織程式的模組結構

程式調用自身的編程技巧稱為遞迴( recursion)。 

 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的代碼量。遞迴的能力在於用有限的語句來定義對象的無限集合。一般來說,遞迴需要有邊界條件、遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞迴返回。 

 注意:  

(1) 遞迴就是在過程或函數裡調用自身;  

(2) 在使用遞迴策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口

(3)遞迴過程中必須要有逼近條件;


1fibonacci數列問題

#include<stdio.h>  static long fibonacci(int n)  //內建函式  {      if(n==1||n==2)          return 1;      else      {          return fibonacci(n-2)+fibonacci(n-1);      }  }  void main()  {      int n,i;      printf("Input n.");      scanf("%d",&n);      for(i=1;i<=n;++i)/*列出每一項的值*/      {          printf("%ld",fibonacci(i));      }  }  

遞迴方式按位輸出一個整數

#include<stdio.h>void print(int n){if (n != 0){print(n / 10);printf("%d", n % 10);}}int main(){int a = 12345;print(a);printf("\n");return 0;}


但值得注意的是 遞迴在調用過程中伴隨著壓棧等操作 過多次的遞迴不想看起來代碼量減少變簡單,而是更加複雜了   通常在return階段執行的遞迴操作被稱為 偽遞迴 ,

偽遞迴可以用迭代方式進行替換  大大減少了記憶體的壓力


fibonacci數列問題的非遞迴實現

int _fib(int n){int n1 = 1;int n2 = 1;int n3 = 0;if(n <= 2)return 1;elsewhile(n>2){n3 = n1 + n2;n1 = n2;n2 = n3;n--;}return n3;}


C中的遞迴問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.