![](/img/trans.png)
[英]Recursive function that prints every second number from n to 0 minimum. What am I missing?
[英]python recursive function that prints from 0 to n?
我正在尝试编写一个从0
打印到n
的递归 function,但我不知道该怎么做。 我不小心做了一个从n
到0
的打印:
def countdown(n):
print(n)
if n == 0:
return 0
return countdown(n - 1)
我不知道这是否有帮助,也许我可以更改代码中的某些内容以使其 go 从0
变为n
?
那里你大约99%。
想想你的基本案例和你的递归步骤 - 当你达到0时,你想做什么? 当你还在从自己的方式工作下来n
,你想要什么发生?
如果您颠倒打印值的顺序,您将达到所需的结果。
def countdown(n):
if n != 0:
countdown(n-1)
print(n)
这样做的原因是递归调用在调用堆栈上进行。 当您将调用推送到堆栈时,如果不满足您的最终用例,您将继续添加更多调用,直到达到n == 0
基本情况,然后您将专门开始打印值。
然后其他调用将进入print语句,因为它们的执行已经返回到条件后的行。
所以,调用堆栈看起来像这样:
countdown(5)
countdown(4)
countdown(3)
countdown(2)
countdown(1)
countdown(0)
print(0)
print(1)
print(2)
print(3)
print(4)
print(5)
你几乎得到了它! 这是一个固定的简化版本:
def countup(n):
if n >= 0:
countup(n - 1)
print(n)
请注意:
print
必须在递归调用之后放置print
语句 n < 0
时递归退出,假设我们只是打印,之后没有什么可以做的,可以返回None
(Python的默认返回值) UPDATE
似乎写一个尾递归解决方案在这里风靡一时:)哦,好吧,这是我的镜头,@ AndyHayden的想法的简化和尾递归版本 - 使用尾调用优化装饰器配方 :
@tail_call_optimized
def countup(N, n=0):
print(n)
if n < N:
countup(N, n + 1)
无论哪种方式,它都按预期工作:
countup(5)
=> 0
1
2
3
4
5
你可以这样做
def fun(num,n):
if num<n:
print(num)
fun(num+1,n)
n=int(input())
print(fun(0,n+1))
你也可以试试这个方法:
def recursion_print(n):
if n==0:
print(n)
else:
recursion_print(n-1)
print(n)
recursion_print(9)
这应该是我这边的最佳答案。我希望你喜欢这个
def countdown(n):
if n >0: #this condition if n is greater than 0 untill run the program.
countdown(n-1) #this is recursion (calling itself).
print(n) #print the numbers.
countdown(10) #function arguments.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.