python – 如何手动确定复杂递归函数的输出

前端之家收集整理的这篇文章主要介绍了python – 如何手动确定复杂递归函数的输出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这是有问题的递归代码

def trace(a,b):
    if (a > b):
        return -1
    elif (a == b):
        print (a * a)
        return a * a
    else:
        m = (a + b) / 2
        return trace (a,m) + trace (m + 1,b)

x=trace(1,4)

虽然我不确定这个函数应该做什么,我们应该手动找到x = trace(1,4)的输出和x的值(意味着我们不能使用idle来帮助我们).

一段时间后,我确定该函数将打印1和12.25,这将是将x分配给trace(1,4)时的输出.

但是,我不知道如何确定X的值是什么.虽然答案是-91.75,但我并不知道它是如何得出的(尽管我知道如何,这需要很长时间才能得出这个答案,而且我不确定我们如何才能快速提出在短时间内解决问题,例如在编写考试时).

在此先感谢您的帮助!

最佳答案
首先,我作弊.有了我的胸部,这里有一些指示:
功能绝对不适用于Python 3!原因是/操作符.在Python 2中,它导致Python3中的整数产生浮点数.所以请记住这个前提条件是我的解决方案:

功能并不复杂.每个变量的每个数据类型都是整数! m将永远是一个整数. x是30.递归级别为3,等于对函数的七次调用(包括第一次).以下是你如何做这些事情:拿一些纸和一支笔,然后写下每一步.

>输入为:a = 1且b = 4,导致函数中的else部分…到目前为止没有输出. m计算为(1 4)/ 2.在我的书中是2.5.但这被四舍五入到2,因为我们有整数.然后递归以两个调用(1,2)和(3,4)开始
>让我们看看(1,2):a = 1和b = 2.再次,没有输出,我们直接到else部分:m计算为3/2,这是一个很好的1.5舍入到1.再次两次调用具有新参数(1,1)和(2,2)的函数.请注意,两个调用现在都将进入函数的elif部分,每个调用都将生成一个输出和一个返回值.您可以将(1,1)替换为1和(2,2)替换为4.递归在此处完成,并且trace(1,2)的调用导致5.让我们看一下递归的另一个分支.
>输入为a = 3且b = 4,这导致另一对具有以下参数的调用:(3,3)和(4,4).
我想现在你应该掌握它.有趣的部分是按照提供的方式添加所有返回值.

关于函数的作用:它总结了a和b之间所有整数的所有平方.

原文链接:https://www.f2er.com/python/438820.html

猜你在找的Python相关文章