递归和非递归实例
- 并简要叙述递归和非递归的区别:
- 递归代码写出来思路清晰,可读性强;递归需要系统堆栈,消耗的空间要比非递归大很多。如果递归深度太深,可能会导致系统奔溃。
- 非递归效率高,执行时间只会因为循环的次数增加而增加,没什么而外开销,也不会占用额外空间。但非递归并不太容易理解,编写复杂问题时比较复杂。
- n!=1*2*3* ……(n-1)n
- 解释:一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n
(未使用递归)
#include <stdio.h>
int main(){
int n,i; //
int factorial =1;
printf("Please enter a integer:");
scanf("%d",&n);
if(n,0){
printf("Erroe! 负数没有阶乘!");
}
else{
for(i=1;i<=n;i++){ //
factorial *= i;
}
printf("%d!= %d",n,factorial);
}
return 0;
}
(使用递归)
#include <stdio.h>
int multiplyNumbers(int n);
int multiplyNumbers(int n){
if(n>=1){
return n*multiplyNumbers(n-1);
}
else{
return 1;
}
}
int main(){
int n;
printf("Please enter a integer:");
scanf("%d",&n);
printf("%d!=%d",n,multiplyNumbers(n));
return 0;
}
- Fibonacci数列
- 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
#include <stdio.h>
int main()
{
int i, n, t1 = 0, t2 = 1, nextTerm;
printf("输出几项: ");
scanf("%d", &n);
printf("斐波那契数列: ");
for (i = 1; i <= n; ++i)
{
printf("%d, ", t1);
nextTerm = t1 + t2;
t1 = t2;
t2 = nextTerm;
}
return 0;
}
- 点赞
- 收藏
- 关注作者
评论(0)