在递归的基础上学习迭代。
#include<stdio.h>
//求n的阶乘
int Facl(int n)//循环方式实现求n的阶乘
{
int i = 0;
int ret = 1;
for (i = 1; i <= n; i++)
ret *= i;
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d", &n);
ret = Facl(n);
printf("%d\n", ret);
return 0;
}
int Facl2(int n)//用递归的方法求阶乘
//{
// if (n <= 1)
// return 1;
// else
// return n * Facl2(n - 1);
//}
//int main()
//{
// int n = 0;
// int ret = 0;
// scanf("%d", &n);
// ret = Facl2(n);
// printf("%d\n", ret);
// return 0;
// return 0;
//}
//求斐波那契数列
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
ret = Fib(n);
printf("ret = %d\n", ret);
return 0;
}
此程序计算较大的斐波那契数列时耗时非常大,电脑需要较长时间才能计算出结果,非常浪费效能。对于一个数重复计算非常多次。因此,此程序用递归是不合理的。
改正:
#include<stido.h>
int Fib(int n)
{
int a = 1, b = 1, c = 1;
while (n>2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
int ret;
scanf("%d", &n);
ret = Fib(n);
printf("ret = %d\n", ret);
return 0;
}
研究汉诺塔问题和青蛙跳台阶问题(未解决);
标签:return,int,study,ret,Fib,daily,printf,scanf From: https://blog.51cto.com/u_15918782/5978545