部分和问题—函数递归部分疑问

这段代码执行过程有点看不懂,不太能够理解,请教一下

void dfs(int i,int sum){
if(i == n) return sum == k;
if(dfs(i+1,sum)) return true;//不加第i个数
if(dfs(i+1,sum+a[i])) return true;//加上第i个数
return false;

这个n在哪里定义的?void怎么返回true false?你的程序是干嘛的

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7683384
  • 这篇博客也不错, 你可以看下虚函数表及虚函数表指针(看似简单,深入部分也不是很懂)
  • 除此之外, 这篇博客: 猿创征文| 指针,这还拿不下你?中的 🍑4、阅读两段有趣的代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 代码1:(*(void (*)())0)();
    代码2:void (*signal(int , void(*)(int)))(int);

    代码分析:

    在读代码时,代码2可谓是相当复杂,为了增加代码的可读性,我们可以使用typedfy-类型重定义关键字对其进行简化:

    int main()
    {
    
    	void(*signal(int, void(*)(int)))(int);
    
    	typedef void(*pf_t)(int) ;//语法规定pf_t在*后边
    	pf_t signal( int, pf_t);
    
    	//////////////////////////////注释////////////////////////////
    	//上述代码是一次函数声明
    	//声明的函数叫:signal
    	//signal函数的第一个参数是int类型的
    	//signal函数的第二个参数是一个函数指针类型,该函数指针指向的函数参数是int,返回类型是void
    	//signal函数的返回类型也是一个函数指针类型,该函数指针指向的函数参数是int,返回类型是void
    	//void (*)(int) signal(int, void(*)(int)); //err
    
    	return 0;
    }
    

    📖总结:像上面这样的表达式恐怕会令我们“不寒而粟”。然而我们大可不必对此望而生畏,我们只需要对其进行拆解,就能对其很好地理解。

  • 您还可以看一下 李月喜老师的企业微信开发自建内部应用开发篇课程中的 通讯录管理,获取部门列表部门成员及成员详情小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    针对这个问题,参考资料中并没有给出具体代码,因此无法解答。

    PS:关于函数递归,可以简单地理解为函数自己调用自己,递归有明显的实际应用,比如计算阶乘、斐波那契数列等问题。由于没有给出具体的函数代码,建议作者自己查找一下递归的相关资料,并结合实际代码进行理解。