2014-12-13 45 views
-3

這裏是Pascal三角形的代碼。它應該通過在行n-1中的每一個新數字(在三角形中)在行n-1上添加兩個數字來工作。當我給數字'4',我期望看到: 1 3 3 1.但是我看到:1. 這是怎麼回事?Pascal Tiangle C++與結束行

#include<iostream> 
using namespace std; 
void fanc(int a[],const int m,int n){ 
    if(n==1){ 
     a[0]=1; 
    } 
    if(n==2){ 
     a[0]=1; 
     a[n]=1; 
    } 
    else{ 
     a[0]=1; 
     a[n]=1; 
     for(int i=1;i<n;i++){ 
      fanc(a,100,n-1); 
      a[i]=a[i-1]+a[i]; 
     } 
    } 
    return; 
} 
int main(){ 
    const int m=100; 
    int a[m],n; 
    cin>>n; 
    fanc(a,100,n); 
    for(int i=0;i<n+1;i++){ 
     cout<<a[i]<<'\t'; 
    } 
    system("PAUSE"); 
    return 0; 
} 
+0

您是否嘗試過使用調試器和檢查往哪裏去了? – BlamKiwi 2014-12-13 13:25:41

回答

1

有幾件事情:
FANC的第二個變量()已經沒有用了,所以你可以將其刪除。
您只想使用fanc()n次,但在這種情況下,每次使用fanc()時,fanc()會被另外使用n-1次,所以fanc()會用於n!所有時間。
每次執行

a[i]=a[i]+a[i-1] 

A [1]的值被改變,所以下次你使用它的時候它wont't是你想要的值。您應該將結果放在另一個數組中以避免這種情況。
下面是我修改了代碼:

#include<iostream> 
using namespace std; 
void fanc(int a[],int n){ 
    if(n==0) 
     return; 
    if(n==1){ 
     a[0]=1; 
     return; 
    } 
    fanc(a,n-1); 
    int b[100]; 
    b[0]=1; 
    for(int i=1;i<n-1;i++) 
     b[i]=a[i]+a[i-1]; 
    b[n-1]=1; 
    for(int i=0;i<n;i++) 
     a[i]=b[i]; 
    return; 
} 
int main(){ 
    const int m=100; 
    int a[m],n; 
    cin>>n; 
    fanc(a,n); 
    for(int i=0;i<n;i++){ 
     cout<<a[i]<<'\t'; 
    } 
    system("PAUSE"); 
    return 0; 
} 
+0

謝謝你發現問題,但我只想用一個數組。所以我必須找到另一種方法。 – 2014-12-13 13:52:29