谈起递归,有一好同学认为递归不过如此,甚至还结合堆栈之类讲了讲递归的执行。于是请他将1+2+3+......+100用递归实现。结果为:
#include <stdio.h>
int sum(int n)
{
if(n<100)
return n+sum(n+1);
else
return 100;
}
void main()
{
printf("%d\n", sum(1));
}
看着他的兴奋劲,我实在无语。
#include <stdio.h>
int sum(int n)
{
if(n == 1)
return 1;
else
return n+sum(n-1);
}
void main()
{
printf("%d\n", sum(100));
}
函数sum的作用为计算1+2+...+n的和。思路也很简单只要计算出1+2+...+(n-1)的和,再加上n的和即问题的解了,sum(n)可以计算1+2+...+n的和,显然sum(n-1)就可以计算1+2+...+(n-1)的和,规模变小,问题重复......
可是他的答案也对,他的程序在理论上也没有问题......
最后,只能表扬之后请他有时间看一下我的关于递归的视频教程。