假設我在C以下功能:遞歸使用局部變量,這是一個「功能部件」纔可見
#include <stdio.h>
int sum(int n);
int main(){
int num,add;
printf("Enter a positive integer:\n");
scanf("%d",&num);
add=sum(num);
printf("sum=%d",add);
}
int sum(int n){
int temp;
temp += 2;
printf("Temp is : %i", temp);
if(n==0)
return n;
else
return n+sum(n-1); /*self call to function sum() */
}
我的問題是,我只希望做temp += 2;
中的第一級循環。所以我希望它只是第一個循環的總和,而不是所有被調用的和函數本身。所以爲了讓問題更清楚一點:在遞歸函數中定義的變量只是遞歸「樹」的第一部分的局部變量?這很難解釋我的問題,所以請問,如果你不明白請。謝謝!
編輯:總結添加printf。所以我想有輸出的幾倍: 溫度爲:2 溫度爲:2
但我認爲這會發生是這樣的:
溫度爲:2 溫度是:4 etc ...
編輯2:對於想要嘗試硬編碼的人,在這裏是:(我的問題其實是,只要聲明ar_in[i]+ space_fill == lw && used[i] == 0
是真的,我想執行所有在那之後陳述的if
聲明,直到return 1;
然後一路返回到函數search_ COMBI。注意:ar_in []數組是幾個數字的陣列,例如{10,80,70,60,80})
bool search_combi(int ar_in[], int index){
if (ar_in[index] == lw){
used[index] = 1;
comb[combcount][0] = index;
return 1;
} else{
tempcomb[0] = index;
tempcombcount++;
space_fill = ar_in[index];
//search right of element
search_right(index+1, ar_in);
return 0;
}
}
int search_right(int start, int ar_in[]){
int i, j;
int temp_space_fill = space_fill;
printf("Tempspace = %i \n", temp_space_fill);
if(choose == 1) {
choose = 0;
return 1;
}
if(start == cn){
return 1;
}else{
for(i = start; i < cn; i++){
space_fill = temp_space_fill;
if(choose == 1) {
break;
}
if (ar_in[i] + space_fill == lw && used[i] == 0){
tempcomb[tempcombcount] = i;
for(j = 0; j <= tempcombcount; j++){
comb[combcount][j] = tempcomb[j];
used[tempcomb[j]] = 1;
}
combcount++;
memset(tempcomb, 0 , sizeof(tempcomb));
tempcombcount = 0;
space_fill = 0;
temp_space_fill = 0;
choose = 1;
return 1;
} else if (ar_in[i] + space_fill < lw && used[i] == 0){
space_fill += ar_in[i];
tempcomb[tempcombcount] = i;
tempcombcount++;
}
search_right(i+1, ar_in);
}
}
return 1;
}
此代碼中未使用此局部變量。因此,展示一個你確實需要一個局部變量的例子。 – 2014-11-05 17:22:50
和'int temp; temp + = 2;'嗯。你認爲你將「2」*添加到*是什麼? – WhozCraig 2014-11-05 17:30:35
局部變量'temp'未初始化爲任何內容。使用未初始化的變量執行數學運算是未定義的行爲。 – user3629249 2014-11-05 18:32:30