c - 为什么这个函数在完成递归运行后返回整数 17?

标签 c function recursion static-variables

根据我的说法,该函数应该返回 2 作为答案,因为每次递归调用该函数时,静态变量“r”都会再次重新分配为零。 注意:函数中传递的参数是5。

int fun(int n){
static int r=0;
  if(n<=0)return 0;
  else if(n>3){
   r=n;
   return fun(n-2)+2;
}
  else return fun(n-1)+r;
}

当向函数传递 5 时,该函数实际上返回 17。

最佳答案

替换

static int r=0;

static int r;
r = 0;

静态变量仅在 main 之前初始化一次。每次需要执行此操作时,您都必须显式地将其重新初始化为 0。

关于c - 为什么这个函数在完成递归运行后返回整数 17?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58103013/

相关文章:

shell - 在 ftp 服务器中递归搜索文件扩展名

javascript - 为什么字符串 "PRINTS"在控制台中显示两次,期望它显示一次。递归测试

c - 函数返回意外指针

objective-c - 数组下标不是整数

c - 子表达式求值顺序

php - 如何从 ajax 返回调用 JavaScript 函数

javascript - 用逗号和特殊字符输入乘法

java - 递归程序中类变量到方法参数的转换

c - 在 Main 中工作,但不在任何其他功能中工作

function - 可以声明将在 Rust 中对未使用的结果发出警告的函数吗?