刚才回答了一次了:
求1+2+……+100的和
先分析一下。第一递归变量的问题,从题目上看应该取1,2,……,100这些变量的值作为递归的条件;第二就是如何终止的问题,从题目上看应该是当数为100的时候就不能往下加了。那么我们试着写一下程序。
int add(int);
main()
{
int num=1,sn;
sn=add(num);
printf("%d\n",sn);
getch();
}
int add(int num)
{
static int sn;
sn+=num;
if(num==100) return sn;
add(++num);
}
分析一下程序:前调用add(1),然后在子函数中把这个1加到sn上面。接着调用add(2),再把sn加2上来。这样一直到100,到了100的时候,先加上来,然后发现满足了if条件,这时返回sn的值,也就是1+2+……+100的值了。
说的太多反而不清楚是什么
回答问题最好不要复制粘贴。。。
递归就是一个函数内出现调用本身的现象,举个最简单的例子,求阶乘:
当n=0或1时,n!=1;当n>1时,n!=n(n-1)!通过这样的思想,程序写为:
int fun(int n)
{
if(n<2)
return 1;
else
return nfun(n-1);
}
看到了fun函数内调用了它本身fun,可以想象一步步下去就可以得到计算结果。
Function fun(n As Integer) As Long
If n = 0 Or n = 1 Then
fun = 1
Else
fun = n fun(n - 1)
End If
End Function
Sub test()
MsgBox fun(5)
End Sub
理解递归,不能从像一般函数那样用过程的方式来理解,而要用“功能”的方式去理解,如果你有面向对象编程的基础,这点是很好说明的
从“功能”上说,fun函数的功能就是给一个整数,返回一个该数的阶乘(一定要紧紧记住这个功能)
那么阶乘是怎么实现的呢?
任何数n的阶乘都是,n (n-1)!,有没有例外呢?有!当n = 0 或者 n = 1的时候 n! = 1
好了,还记得刚才要牢记的那个“功能”么?就好像现在我们已经写好了这个"功能"函数fun(n)
前面已经说了 n = 1 or n = 0 时 自然返回 1
如果n 不等于1 就要用到n (n-1)! 而(n-1)!可以用fun(n-1)代替,因为他满足这个函数的功能
试着从"功能"上去理解函数,在想想吧,希望能帮到你
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)