遞迴
相關概念
1 棧結構
2 終止條件
3 編譯原理
從最簡單的例子入手
demo1
public class fibonacci }
public static void main(string args) }
輸出結果是3 2 1
demo2
public class fibonacci }
public static void main(string args) }
輸出結果是1 2 3
重點在於理解編譯器的棧執行模式
參考編譯原理
demo1
heap
stack
n=0
a(int n) n=1 position
n=1position
n=1position
a(int n) n=2 position
a(int n) n=2position
n=2position
n=2position
n=2position
a(int n) n=3 postion
a(int n) n=3 position
a(int n) n=3 position
n=3 position
n=3position
n=3position
n=3position
console
3
2
1
static variables
code
public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
} public static void main(string args)
}public class fibonacci
}public static void main(string args)
} demo2
heap
stack
a(int n) n=0position
要執行};
n=0position
a(int n) n=1position
要執行print("%d",n);
a(int n) n=1position
要執行print("%d",n);
a(int n) n=1position
要執行print("%d",n);
a(int n)
n=1position
a(int n) n=2position
要執行print("%d",n);
a(int n) n=2position
要執行print("%d",n);
a(int n) n=2position
要執行print("%d",n);
a(int n) n=2position
要執行print("%d",n);
a(int n) n=2position
要執行print("%d",n);
a(int n)
n=2position
要執行print("%d",n);
a(int n) n=2position
要執行print("%d",n);
a(int n) n=3 position
a(int n) n=3 position
要執行print("%d",n);
a(int n) n=3 position
要執行print("%d",n);
a(int n) n=3 position
要執行print("%d",n);
a(int n) n=3 position
要執行print("%d",n);
a(int n) n=3 position
要執行print("%d",n);
a(int n) n=3 position
要執行print("%d",n);
a(int n)
n=3 position
要執行print("%d",n);
console
1
2
3
static variables
code
public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
}public class fibonacci
}public static void main(string args)
} 在舉乙個例子是
fibonacci list
f(1)=1 f(0)=0
demo
public class
public static void main(string args) }
}
費波納切更能展現出編譯原理中編譯器的執行結構。
費波納切執行結構非常惱火
但是通過費波納切可以記得乙個重要點是當進入棧的時候,函式的執行起點同時被儲存
儲存的要素有三個
函式a() n的值 函式執行位置
當返回後,函式從後面繼續執行
最重要一點
繼續往後執行不意味著出棧,而是以前面儲存的n值繼續執行後面的
return getfibo(i - 1) + getfibo(i - 2);
例如此處 儲存getfibo(i - 1) n=i-1 此處i=4 則getfibo(i - 1)執行為
getfibo(3)
然後執行 n=i-1 後面的 getfibo(i - 2) 執行getfibo(i - 2)
執行為getfibo(2)
斐波那契數列排列後類似如下形式
編譯安裝原理理解
configure從程式檔案角度出發是乙個可執行指令碼,執行此指令碼是為了生成makefile檔案,這個檔案是乙個相當於定的規矩的檔案,也就是顯式規則說明,在此可通過在configure後新增引數拉對安裝進行控制,比如說將配置檔案放在某個目錄下,將日誌檔案放在某個目錄下等,這個指令碼檔案的執行也是對...
程式編譯和鏈結原理理解
一 本書解決的問題 本書主要介紹系統軟體的執行機制和原理,涉及在windows和linux兩個系統平台下,乙個應用程式在編譯 鏈結 和執行時所做的事,具體如下 1.windows和linux作業系統下各自的可執行檔案 目標檔案格式?2.普通的c c 程式 如何編譯成目標檔案及程式的目標檔案如何儲存?...
CSS 原理理解
網頁製作最初,html規定了 normal document stream 標準文件流 來規範元素在網頁中的顯示法則 標準文件流中元素分兩種 塊內元素,行內元素。行內元素的特點 span標籤 豎直margin中的塌陷現象,上下緊密排列的元素的外邊距並不是兩個元素外邊距之和,而是選取那個最大的外邊距作...