2016-07-23 88 views
0

考慮函數價值變量

void solve(int arr[],int ind,int sum,int n,int count) 
{ 
    if(ind==n){ 
      if(sum>max) 
       max=sum; 
     } 
     else{ 
      sum+=arr[ind];//sum 
      if(ind==n-1) 
      solve(arr,ind+1,sum,n,1);//1st call 
      if(ind==n-2 && count>1) 
      solve(arr,ind+2,sum,n,1);//2nd call 
      if(ind<n-1 && count<2){ 
       count++; 
       solve(arr,ind+1,sum,n,count);//3rd call 
      } 
      if(ind<n-2) 
       solve(arr,ind+2,sum,n,1);//4th call 
      if(ind<n-3) 
       solve(arr,ind+3,sum,n,1);//5th call 
     } 
} 

我對邏輯沒有問題,但我困惑的variables.I的傳球我不能夠做出來是否整數sum+=arr[ind] //sum作爲每個調用中的相同變量傳遞,還是每次調用函數後都會更新?

+0

Thnx ..我得到了答案我gues ...但@ user3386109你是什麼意思的C++答案....是不是在C? – yobro97

+1

引用是一個C++特性。在C中,你會使用一個指針。 – user3386109

+0

好吧......明白! – yobro97

回答

2

sum通過值傳遞,所以該值不會被更新。以下5 solve調用將以相同的sum值傳遞。

如果你想sum給每個呼叫後進行更新,你應該通過引用傳遞它:void solve(int arr[],int ind,int &sum,int n,int count)

1

sum值更新,但每次locally功能solve得到called.You可以打印值這個可視化在函數定義內的總和。

請看下面的例子。

#include <stdio.h> 
void call(int); 
int main(void) { 
    // your code goes here 
    call(5); 
    return 0; 
} 
void call(int sum) 
{ 
    if(sum>15) 
     return; 
    printf("%d ",sum); 
    sum+=5; 
    call(sum); 

} 

該o/p是5 10 15

可能會幫助您更清晰地形象化。