这是一个尾递归:
切记,直接用递归,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:
Ref: 尾递归为啥能优化?
尾递归在普通尾调用的基础上,多出了2个特征:
1. 在尾部调用的是函数自身 (Self-called);
2. 可通过优化,使得计算仅占用常量栈空间 (Stack Space)。
不会爆栈是因为语言的编译器或者解释器所做了“尾递归优化”,才让它不会爆栈的。
正确的套路又会是什么?
原文:https://www.cnblogs.com/jesse123/p/13997998.html