有些函数式编程语言是没有循环的,如Lisp。那么高斯同学的1+2+3+...+100如何用递归求解呢?
下面给出递归算法求高斯同学的5050:
#include <stdio.h>
int add(int n)
{
if (n < 1)
return 0;
return n + add(n - 1);
}
int main(void)
{
printf("%d\n", add(100));
return 0;
}
尾递归:
#include <stdio.h>
int add(int n, int result)
{
if (n < 1)
return result;
return add(n - 1, result + n);
}
int main(void)
{
printf("%d\n", add(100, 0));
return 0;
}
高斯同学说一行代码更简单:
result = ((n + 1) * n) / 2;
所以还是高斯同学赢了23333!