天天看點

不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP

今天我的一位同僚在微信群裡發了一張圖檔,勾起了我的好奇心:不同程式設計語言支援的函數遞歸調用的最大嵌套層數是?

不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP

Java 1.8

private static void recur(int i){

  System.out.println("Stack level: " + i);

  recur(++i);

}
           

測試結果:8644

不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP

Javascript in Chrome

Chrome版本:

Version 70.0.3538.102 (Official Build) (64-bit)

function a(i){

   console.log("stack level: " + i)

   a(i+1);

}

a(0);
           

測試結果:11412

不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP

JavaScript in nodejs

nodejs version: v8.11.3

不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP

測試結果:11213

Golang

版本:

不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP
不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP

測試結果:3947556

不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP

ABAP

data: lv_temp type int4.

form recur using iv type int4.

  sy-index = iv.

  lv_temp = iv + 1.

  perform recur using lv_temp .

endform.

START-OF-SELECTION.

   perform recur using 0.
           

實際上是out-of-memory錯誤。

不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP

測試結果:12258206

不同程式設計語言在發生stackoverflow之前支援的調用棧最大嵌套層數Java 1.8Javascript in ChromeJavaScript in nodejsGolangABAP

本文來自雲栖社群合作夥伴“汪子熙”,了解相關資訊可以關注微信公衆号"汪子熙"。