[英]This c program works fine in windows but not working in Linux
[英]Why is this C program crashes on windows and works fine on linux?
我寫了一個程序來查找諧波數
(第n個諧波數是前n個自然數的倒數之和)
數字序列。 我的程序將其輸入作為命令行參數,並以表格格式打印諧波數。 作為一個例子這就是它的工作原理:
C:\Users\EDDiE\c>har 10 30 5
10 2.9289682539682538
15 3.3182289932289937
20 3.5977396571436819
25 3.8159581777535068
30 3.9949871309203906
10( argv [1] )=起始編號,
30( argv [2] )=結束數字,
5( argv [3] )=前進的步驟。
在我的Windows 8機器上,該程序在 43429 處 崩潰
然后我在一個在線的c編譯器上執行它是一個linux環境(“我想”,我不是一個linux用戶)而且它工作正常。
這是我的計划:
har.c
#include <stdio.h>
#include <stdlib.h>
double harmonic(int);
int main(int argc, char *argv[])
{
int j;
int start = 1, end = 10, step = 1;
switch(argc) {
case 1:
break;
case 2:
end = atoi(argv[1]);
break;
case 3:
start = atoi(argv[1]);
end = atoi(argv[2]);
break;
case 4:
start = atoi(argv[1]);
end = atoi(argv[2]);
step = atoi(argv[3]);
break;
}
for (j = start; j <= end; j += step)
printf("%7d %3.20g\n", j, harmonic(j));
return 0;
}
double harmonic(int n)
{
//double H;
if (n == 1 || n == 0)
return 1.0;
else
return (1.0 / (double) n) + harmonic(n - 1);
//return H;
}
我需要知道為什么這個程序在Windows環境下崩潰。
我需要在代碼中(或在我的系統中)修改任何內容嗎?
正如評論中已經說明的那樣,您最有可能遇到堆棧溢出。 雖然有希望,但您的遞歸可以輕松轉換為迭代,如下所示:
double harmonic(int n) {
if(n == 0) return 1.0;
double res = 0.0;
while(n > 0) {
res += (1.0 / (double) n);
--n;
}
return res;
}
這樣你的程序將適用於大n
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.