【发布时间】:2016-09-25 06:31:07
【问题描述】:
我看到了一个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){
if(n==0)
return n;
else
return n+sum(n-1); /*self call to function sum() */
}
但在这里我无法理解 sum 函数实际上只返回从代码中可见的 0,否则它将返回自身加上 n。
那么函数调用是如何被转换为数字的,函数中没有任何行告诉返回 n 本身,除了它是 0 。
【问题讨论】:
-
非常好的问题 +1 开始。我想知道答案。
-
按照逻辑就行了。如果
n是0,那么它当然会返回0。如果n是1 怎么办?然后它返回1 + sum(0)。好吧,sum(0)是 0。所以1 + sum(0)是 1。明白了吗?同理,sum(2)为 3,sum(3)为 6,以此类推 -
查找“基本情况”,它将帮助你,当它返回 0 时,它是递归的基本情况
-
这里的问题是这个函数只允许返回0它如何返回其他东西
-
一个更好的问题可能是:为什么要为如此简单的事情编写如此不必要的缓慢且效率低下的函数?这是非常糟糕的编程。请不要研究如何进行非常糟糕的编程。
标签: c function recursion logic recursive-query