使用递归然后循环(for,while,do-while)有什么好处?
使用递归(这里我得到一个给定数字的总和,假设数字是5然后5 + 4 + 3 + 2 + 1:
#include<stdio.h>
int sum(int n);
void main()
{
int sums =0, n;
scanf("%d",&n);
sums = sum(n);
printf("%d",sums);
while (1)
{
}
}
int sum(int n)
{
if (n==1)
return 1;
return n + sum(n-1);
}
没有递归(这里我得到一个给定数字的总和假设数字是5然后5 + 4 + 3 + 2 + 1:
#include<stdio.h>
void main()
{
int sum =0, n;
scanf("%d",&n);
for(int i=n;i>=1;i--)
{
sum = sum + i;
}
printf("%d",sum);
while (1)
{
}
}
答案 0 :(得分:7)
你可以始终使递归函数成为迭代函数,反之亦然(Turing said)。
在某些情况下,最好使用递归(例如在树上旅行),在这种情况下“递归思考”更自然。但是,如果使用循环并不比递归更复杂和困难,我更喜欢它们。
递归在内存中成本更高,但有时它更清晰,更易读,使用循环可以提高性能,但递归对于程序员来说有时会更好(以及他的表现)。
决定使用什么 - 递归或迭代,取决于你想要实现什么,以及什么对你更重要(可读性?性能?),询问递归或迭代在某种程度上要求优雅或表现。
答案 1 :(得分:2)
递归可以解决所有可以通过for循环解决的问题。但是通过for循环解决某些问题是困难的或完全不可能的。例如“ json”解析,“ xml”解析等。对于此类问题,应使用递归。某些动态问题可以通过递归而不是for循环轻松解决。对于一个难题,您不必考虑通过递归而不是for循环来解决问题。您只需形成Recurrence_relation。
答案 2 :(得分:1)
我更喜欢循环遍历递归函数。看看这是否有帮助:Read it