2016-07-23 168 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

可能会帮助您更清晰地形象化。