Python|函数递归-sin之舞

简介: Python|函数递归-sin之舞

问题描述

最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。
不妨设:
An=sin(1sin(2+sin(3sin(4+...sin(n))...)
Sn=(...(A1+n)A2+n-1)A3+...+2)An+1
FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。


解决方案

问题明显是两个部分,由An和Sn组成,而且Sn是由An和其他部分组成。

观察两个表达式,发现它们可以的组成含有一定的规律,开始考虑函数递归的思路,找到递归出口和递归规律。

先看Sn部分,将Sn的表达式进行翻转,然后将由+号连接的部分看作为一项,可以发现每一项都可以由一个通项公式——“Aj +n + 1 - j)”表示,这个规律也就是递归的通项公式,而且递归出口也就是当j等于n时,也就是翻转后的Sn的第一项;

再看An部分,从后往前看,可以发现“I +-1i * sin()”构成了它前一项的sin内的值,且最后一项为sinn),这样An的递归规律也就找到了,同时,递归出口也很容易发现:当i等于n的时候,也就是最后一项sinn)。

python代码:

def An(i,n):#An表达式的函数,
   if i==n:#递归出口,最后一项
       return 'sin'+'('+str(n)+')'
   else:
       return 'sin'+'('+str(i)+'+'+str((-1)**i)+str(An(i+1,n))+')'#连接通项公式,开始递归
def Sn(n,j):#Sn表达式的函数
   if j==n:#递归出口,翻转后Sn的第一项
       return str(n)+'+'+str(An(1,1))
   else:
       return str(j)+'+'+str(An(1,n+1-j))+'('+str(Sn(n,j+1))+')'#开始递归,需要将An()放入递归中



结语

当完成上述函数递归后,假设需要求S3的表达式,会得到这样的结果:1+sin(1+-1sin(2+1sin(3)))(2+sin(1+-1sin(2))(3+sin(1)))这个结果虽然是正确的,但是出现一个问题,那就是负号出现时正号也会出现,也就还需要一些调整,注意得到的Sn是一个字符串,那么问题也就变得简单了,只需要遍历这个字符串,如果出现正负号同时存在的情况,便将负号删除。

同时通过这个递归的简单应用,可以发现递归的一般思路步骤:首先分析问题,找到递归规律,然后找到递归出口,最后分析递归开始的条件和位置,完成递归。




目录
相关文章
|
16小时前
|
Python
PyQt---------信号与槽函数的关系
PyQt---------信号与槽函数的关系
6 1
|
16小时前
|
Python
Python闭包函数和计时器
本文介绍了闭包函数的概念,它允许内部函数引用外部作用域的变量但无法修改它们。示例展示了如何使用闭包来封装函数。接着,文章讨论了如何在函数调用时添加开始和结束的打印语句,通过传递函数作为参数实现。然后,文章引入装饰器,通过闭包定义了一个`timer`装饰器,用于在函数执行前后打印消息。最后,给出了一个练习,实现了一个计算函数执行时间的装饰器,处理了带有参数的被装饰函数。
9 1
|
16小时前
|
测试技术 开发者 Python
Python检查函数和方法的输入/输出
【5月更文挑战第5天】Python检查函数和方法的输入/输出
10 1
|
16小时前
|
Python
在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存
【5月更文挑战第12天】在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存在,该函数对路径进行检查,存在则返回True,不存在则返回False。示例代码展示了如何检查'example.txt'文件是否存在并相应打印消息。此外,`os.path.isfile()`用于确认路径是否为文件,仅当是文件时返回True,否则返回False,同样配以示例说明其用法。
16 2
|
16小时前
|
Python
【Python操作基础】——函数
【Python操作基础】——函数
|
16小时前
|
Python
Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。
【5月更文挑战第11天】Python的全局变量作用于整个程序,生命周期与程序相同,而局部变量仅限函数内部使用,随函数执行结束而销毁。在函数内部修改全局变量需用`global`关键字声明,否则会创建新局部变量。
15 2
|
16小时前
|
Java C# 开发者
Python 中的类型注解是一种用于描述变量、函数参数和返回值预期类型的机制
【5月更文挑战第8天】Python的类型注解提升代码可读性和可维护性,虽非强制,但利于静态类型检查(如Mypy)。包括:变量注解、函数参数和返回值注解,使用内置或`typing`模块的复杂类型,自定义类型注解,以及泛型模拟。类型注解可在变量声明、函数定义和注释中使用,帮助避免类型错误,提高开发效率。
20 6
|
17小时前
|
存储 Python
【Python 基础】解释reduce函数的工作原理
【5月更文挑战第6天】【Python 基础】解释reduce函数的工作原理
|
16小时前
|
Python
【Python 基础】解释map函数的工作原理
【5月更文挑战第6天】【Python 基础】解释map函数的工作原理
|
17小时前
|
索引 Python
【Python 基础】解释Range函数
【5月更文挑战第6天】【Python 基础】解释Range函数