whereFly
V2EX  ›  Python

请问这算是递归函数码?

By whereFly at 2022 年 6 月 10 日 · 4217 次点击
def aa1(n): if n == 1: return 1 else: aa2(n)

def aa2(n): m = n-1 aa1(m)

14 条回复  •  2022-06-11 15:39:25 +08:00
ws52001
   1
ws52001  
   2022 年 6 月 10 日
算的,递归函数的定义就是直接或者间接调用函数本身。你这个算是间接调用。
Jooooooooo
   2
Jooooooooo  
   2022 年 6 月 10 日
算, 你把 aa2 展开放到 aa1 里就更直观了.
ychost
   3
ychost  
   2022 年 6 月 10 日
这是循环依赖,不过也算递归
LLaMA2
   4
LLaMA2  
   2022 年 6 月 10 日
```
function aa1(n: number) {
while (n === 1) {
return 1;
}
aa1(n - 1);
}
```

你写的不就是这个
breeza
   5
breeza  
   2022 年 6 月 10 日
这个叫互递归
hello2090
   6
hello2090  
   2022 年 6 月 10 日 via iPhone
你这不就 aa1(n - 1)么
whereFly
   7
whereFly  
OP
   2022 年 6 月 10 日
@ws52001 递归函数+time.sleep 间隔一段时间循环执行会遇到栈溢出,无解了吗?
IMXT
   8
IMXT  
   2022 年 6 月 10 日 via Android
尾递归就不会爆栈了,前提是编译器实现了尾递归优化
necomancer
   9
necomancer  
   2022 年 6 月 10 日
是不是少了 return ?(在 else 和 aa2 里)
dingwen07
   10
dingwen07  
   2022 年 6 月 11 日 via iPhone
@whereFly #7
Python 无解吧,不会对 tail recursion 优化
几乎所有递归都可以改循环
xiayushengfan
   11
xiayushengfan  
   2022 年 6 月 11 日
禁止套娃
anshigm
   12
anshigm  
   2022 年 6 月 11 日
逻辑上不就是这样?
while (n !=1 )
n -=1
return 1
一个简单的循环能搞定为什么要用这么复杂的递归?这么写有什么深意吗?
whereFly
   13
whereFly  
OP
   2022 年 6 月 11 日
@anshigm 只是举例,实际是用了递归函数+time.sleep 来间隔一定时间执行程序,然后就遇到了栈溢出。
aijam
   14
aijam  
   2022 年 6 月 11 日
mutual recursion
推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
© 2026 V2EX · 71ms · 3.9.8.5