解题思路:
递归算法的思路是:
递归算法最重要的是需要结束条件: N<1时 结束。
其他情况 返回 fun(N/2)
递归算法:
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归,就是在运行的过程中调用自己。
构成递归需具备的条件:
函数嵌套调用过程示例
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。
注意事项:
注意g_count计数器每次要清空!
参考代码:
#include <stdio.h> int g_count=0; int fun(int N) { if(N<1) return 0; else g_count++; return fun(N/2); } int main() { int N; while(~scanf("%d",&N)) { fun(N); printf("%d\n",g_count); g_count=0; } }
非递归算法:
#include <stdio.h> int g_count=0; int main() { int N; while(~scanf("%d",&N)) { while(N>=1) { N/=2; g_count++; } printf("%d\n",g_count); g_count=0; } }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:590 |
C语言程序设计教程(第三版)课后习题6.3 (Java代码)浏览:695 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:793 |
【偶数求和】 (C语言代码)浏览:588 |
WU-格式化数据输出 (C语言代码)浏览:1818 |
模拟计算器 (C++代码)浏览:885 |
神奇的fans (C语言代码)浏览:1124 |
杨辉三角 (C语言代码)浏览:734 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:465 |
简单的a+b (C语言代码)浏览:531 |