here是我的代碼。顯示突然行爲的全局變量
#include <stdio.h>
#define MAX(a,b) ((a)>(b)?(a):(b))
#define SZA(a) (sizeof(a)/sizeof(a[0]))
int anish=0; // global variable showing abrupt behaviour
int a[]={0,1,5,8,9,10,17,17,20,24,30};
int n= SZA(a);
int cache[100];
int road(int len)
{
anish++;
if(cache[len]!=-1)
return cache[len];
if(len<=0)
return 0;
int max=0;
int i;
for(i=1;(i<n && len>=i);i++)
{
max=MAX(max,a[i]+road(len-i));
}
return cache[len]=max;
}
void f()
{
anish=13;
}
int main()
{
int i;
for(i=0;i<=13;i++)
cache[i]=-1;
int len=10;
// f();
printf("%d %d\n",road(len),anish);
return 0;
}
在此,road()
是一個遞歸函數,我想計算正在執行該功能的次數。所以,我通過一個全局變量anish
來做這件事。 但是anish
的值在此road()
函數中沒有變化,而在函數f()
中值anish
正在修改中。
這種荒謬行爲的任何理由?
大聲笑,你不斷改變主意接受哪個答案。 – Chimera
我想接受兩個答案,因爲兩者都是一樣的,但結果是你只能接受一個答案:/ – Amit
如果你覺得我的答案值得,你可以放棄它。點擊0上方的箭頭。感謝您考慮我的答案。 – Chimera