0
点赞
收藏
分享

微信扫一扫

daily study 5

在递归的基础上学习迭代。

#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;

}

研究汉诺塔问题和青蛙跳台阶问题(未解决);

举报

相关推荐

0 条评论