首页 > 其他 > 详细

[Optimization] Tail Recursion

时间:2020-11-18 10:06:08      阅读:30      评论:0      收藏:0      [点我收藏+]

一、递归耗时

这是一个尾递归:

技术分享图片

切记,直接用递归,test都会没问题,submit后就会打脸,潜规则了~

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the stepPerms function below.
def stepPerms(n):
    if n == 3:
        return 4
    if n == 2:
        return 2
    if n == 1:
        return 1
    
    if n > 3:
        return stepPerms(n-1) + stepPerms(n-2) +stepPerms(n-3)
    
if __name__ == __main__:
    fptr = open(os.environ[OUTPUT_PATH], w)

    s = int(input())

    for s_itr in range(s):
        n = int(input())

        res = stepPerms(n)

        fptr.write(str(res) + \n)

    fptr.close()

Output: 

技术分享图片

 

 

 

二、尾递归de优化

Ref: 尾递归为啥能优化?

尾递归在普通尾调用的基础上,多出了2个特征:

1. 在尾部调用的是函数自身 (Self-called);

2. 可通过优化,使得计算仅占用常量栈空间 (Stack Space)。

不会爆栈是因为语言的编译器或者解释器所做了“尾递归优化”,才让它不会爆栈的。

正确的套路又会是什么?

 

 

 

 

[Optimization] Tail Recursion

原文:https://www.cnblogs.com/jesse123/p/13997998.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!