看到有人是这样形容递归的:
假设你在一个电影院,你想知道自己坐在哪一排,但是前面人很多,你懒得去数了,于是你问前一排的人「你坐在哪一排?」,这样前面的人 (代号 A) 回答你以后,你就知道自己在哪一排了——只要把 A 的答案加一,就是自己所在的排了。不料 A 比你还懒,他也不想数,于是他也问他前面的人 B「你坐在哪一排?」,这样 A 可以用和你一模一样的步骤知道自己所在的排。然后 B 也如法炮制。直到他们这一串人问到了最前面的一排,第一排的人告诉问问题的人「我在第一排」。最后大家就都知道自己在哪一排了。
程序员的定义:
一个过程或函数在定义时,直接或者间接调用自己。
数学归纳法:
(1)证明 case 0 成立;
(2)如果 case i 成立 => 则 case ( i + 1 ) 成立。
举例:求 n!
1 首先明确 递归出口:确定递归什么时候结束。
fun(1)=1;
2 递归体:递归关系。
fun(n)=n*fun(n-1),n>1。
3 思路:
把 f(n)=n! 转化成 fun(n-1) ,再把 fun(n-1) 分解为 f(n-2) ...
4 函数体
int fun(int n){
if(n==1)
return 1;
else
return n*fun(n-1);
}
迭代和递归
迭代:循环结构,例如for,while循环
迭代是更新变量的旧值。
递归:选择结构,例如if else 调用自己,并在合适时机退出。
递归是在函数内部调用自身。