[問題] 請問這個code為何超過64000就會出錯

看板Programming作者 (証証)時間9年前 (2015/04/28 22:43), 編輯推噓4(5112)
留言18則, 9人參與, 最新討論串1/1
#include "stdafx.h" #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <time.h> int z(char* ,int); int main(array<System::String ^> ^args) { clock_t t1, t2; char arr[1000]; int times; printf("input="); gets(arr); printf("times="); scanf("%d",&times); t1 = clock(); z(&arr[0] , times); t2 = clock(); printf("\n------%lf\n", (t2-t1)/(double)(CLOCKS_PER_SEC)); system("pause"); return 0; } int z(char* arr, int times) { static int c = 1; printf("%s",arr); c++; if(c<=times){ z(&arr[0],times); } return 0; } 手機排版請見諒 -- Sent from my Android -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.115.204.104 ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1430232184.A.EBC.html

04/28 22:49, , 1F
手機輸入程式 算你狠
04/28 22:49, 1F

04/28 23:23, , 2F
感覺像是函式堆疊過深的問題
04/28 23:23, 2F

04/28 23:33, , 3F
請問解決方式 我用的開發軟體是 visual s
04/28 23:33, 3F

04/28 23:33, , 4F
tudio 2010
04/28 23:33, 4F

04/28 23:50, , 5F
堆疊過深就改寫成迴圈吧
04/28 23:50, 5F

04/29 00:13, , 6F
可是要求用recursive寫==
04/29 00:13, 6F

04/29 00:31, , 7F
stackoverflow.com/questions/2556938/
04/29 00:31, 7F

04/29 02:16, , 8F
C++也能這樣改stack size?
04/29 02:16, 8F

04/29 09:48, , 9F
遞迴太深, 超過堆疊大小
04/29 09:48, 9F

04/29 10:08, , 10F
把return 0拿掉,改成回傳void
04/29 10:08, 10F

04/29 10:09, , 11F
gcc -O2會使用TCO把它轉換成loop
04/29 10:09, 11F

04/29 10:09, , 12F
VC我就不知道了,你可以自己試試
04/29 10:09, 12F

04/30 15:36, , 13F
用tail recursion的寫法有幫助嗎?
04/30 15:36, 13F

05/05 12:47, , 14F
仔細看了一下code 這個是MC++
05/05 12:47, 14F

05/05 12:47, , 15F
可能要看CLI VM怎麼實作的了....
05/05 12:47, 15F

05/05 12:53, , 16F
不過這個改一下main簽名就變合法C++了
05/05 12:53, 16F

05/05 13:10, , 17F
不過我剛剛發現 LLVM 6.1下
05/05 13:10, 17F

05/05 13:10, , 18F
即使z仍然有return 0, TCO仍然生效
05/05 13:10, 18F
文章代碼(AID): #1LFvnuwy (Programming)