求递归函数的例子解析

求递归函数的例子解析,第1张

刚才回答了一次了:

求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)代替,因为他满足这个函数的功能

试着从"功能"上去理解函数,在想想吧,希望能帮到你

    

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11677026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存