C指標原理(40) 遞迴 1

2021-09-19 08:25:44 字數 2452 閱讀 3909

一、遞迴

遞迴在電腦科學中,是指在函式的定義中使用函式自身的方法,遞迴是進行迴圈的一種技巧(在類lisp等函式語言中它也是實現迴圈的主要甚至唯一途徑,比如下面的lisp**)。

1、費波那西數列(義大利語:successione di fibonacci),又譯費波拿契數、斐波那契數列、費氏數列、**分割數列。

在數學上,費波那西數列是以遞迴的方法來定義:

遞迴是完成費波那西數列計算的方法之一,費波那西數列由0和1開始,之後的費波那西係數就由之前的兩數相加。

、rain****直譯器c語言實現

brain****,是一種極小化的計算機語言,它是由urban müller在2023年建立的。一種簡單的、可以用最小的編譯器來實現的、符合圖靈完全思想的程式語言。這種語言由八種運算子構成,brain****的計算方式如此與眾不同,基於乙個簡單的機器模型,除了指令,這個機器還包括:乙個以位元組為單位、被初始化為零的陣列、乙個指向該陣列的指標(初始時指向陣列的第乙個位元組)、以及用於輸入輸出的兩個位元組流。

下面是這八種狀態的描述,其中每個狀態由乙個字元標識:

字元含義

指標加一

指標減一

指標指向的位元組的值加一

指標指向的位元組的值減一

輸出指標指向的單元內容(ascii碼)

輸入內容到指標指向的單元(ascii碼)

如果指標指向的單元值為零,向後跳轉到對應的]指令的次一指令處

如果指標指向的單元值不為零,向前跳轉到對應的[指令的次一指令處

首先,完成這個直譯器,該程式對所需要用到的變數作了如下宣告:

1、陣列變數

char a[5000], f[5000]

其中a#include

int p, r, q;

char a[5000], f[5000], b, o, *s=f;

void interpret(char *c)

char *d; int tmp;

r++;

while( *c ) else 執行程式,main以40為引數n的值,呼叫fib,fib陸續輸出前41個費波那西係數的值,也是說數列中的41個數(因為第1個數0不是第一項,而是第零項):

dp@dp:~ % gcc fib.c -o fib

dp@dp:~ % ./fib

第0項:0

第1項:1

第2項:1

第3項:2

第4項:3

第5項:5

第6項:8

第7項:13

第8項:21

第9項:34

第10項:55

第11項:89

第12項:144

第13項:233

第14項:377

第15項:610

第16項:987

第17項:1597

第18項:2584

第19項:4181

第20項:6765

第21項:10946

第22項:17711

第23項:28657

第24項:46368

第25項:75025

第26項:121393

第27項:196418

第28項:317811

第29項:514229

第30項:832040

第31項:1346269

第32項:2178309

第33項:3524578

第34項:5702887

第35項:9227465

第36項:14930352

第37項:24157817

第38項:39088169

第39項:63245986

第40項:102334155

其演算法可描述如下:

(1)fib函式在數列不為0時,進入遞迴狀態,反覆呼叫自己(也就是fib)。

這個過程雖然呼叫的都是fib函式,但每次呼叫的引數都不一定一致辭,因為每次呼叫函式,都將新的引數傳送給fib函式,每次fib函式的執行需要的引數都是上次fib函式在執行過程中傳遞的。此外,函式的引數傳遞方式是通過函式所屬的堆疊完成的,這意味著雖然遞迴多次反覆呼叫fib函式,但引數只是在本次fib函式執行中用到,使用完畢後堆疊空間就將本次所用的引數釋放。fib對fib自身進行不斷呼叫(**中的「fib_n(next, curr+next, n-1)」),每次呼叫fib_n函式,curr引數在增長中(curr引數表示數列中的當前項,初始值為0,每次新值為next),而next引數也在增長(next引數表示數列中的下一項,初始值為1,每次新值為curr+next),n引數在減少中(n是乙個計數器,注意這個計數器到0才算結束,每次減少1,n初始值為40,n控制了生成的費波那西數列的數的數量)。

(2)在n值等於0時,所有對fib函式的呼叫結束了,生成的費波那西數的數量達到了程式要求。在數列的開始處(**中的「n==0」),最後一次呼叫fib函式完成,函式返回了程式要求的數列中最後乙個數的計算(**中的「return curr;」),這時的curr等於102334155)。

C指標原理 5

plain view plain copy print?section data myvalue byte 67,68,69,70,0 mygs asciz c n section text globl main main 基位址 偏移位址 必須為暫存器 資料元素變址,資料元素長度 必須為暫存器 基...

C指標原理 6

內聯彙編的重要性體現在它能夠靈活操作,而且可以使其輸出通過 c 變數顯示出來。因為它具有這種能力,所以 asm 可以用作彙編指令和包含它的 c 程式之間的介面。簡單得說,內聯彙編,就是可以讓程式設計師在c語言中直接嵌入彙編 並與彙編 互動c程式中的c表示式,享受彙編的高執行效率。內聯彙編的格式是直接...

C指標原理 12

2 擴充計算器 加入對括號和注釋的支援,首先修改flex 檔案,在第二部分加入更多的詞法規則 對於注釋直接忽略 忽略注釋 然後,修改bison term number abs term leftbracket exp rightbracket 我們的注釋以 表示 測試結果 myhaspl myhas...