发布时间 : 星期一 文章递归和迭代更新完毕开始阅读6e17b5ddc281e53a5902ff02
递归和迭代
这两个概念也许很多童鞋依旧分不清楚,下面通过求解斐波那契数来看看它们俩的关系吧。
斐波那契数的定义:
f0=0
f1=1
fi=fi?1+fi?2(i>1)
递归:
(factorial6)(*6 (factorial5))(*6 (*5 (factorial4)))(*6 (*5 (*4 (factorial3))))(*6 (*5 (*4 (*3 (factorial2)))))(*6 (*5 (*4 (*3 (2 (factorial1))))))(*6 (*5 (*4 (*3 (*21)))))(*6 (*5 (*4 (* 3 2)))) (*6 (*5 (*46)))(*6 (*524))(*6120)720
? ? ? ? ? ?
1 2 3 4 5 6
? ? ? ? ? ?
7 8 9 10 11 12
迭代:
(factorial6)(factorial116)(factorial126)(factorial236)(factorial646)(factorial2456)(factorial12066)(factorial72076)720
? ? ? ? ? ? ? ? ?
1 2 3 4 5 6 7 8 9
递归的核心在于:不断地回到起点。 迭代的核心在于:不断地更新参数。
在下面的代码中:
递归的核心是sum的运算,sum不断的累乘,虽然运算的数值不同,但形式和意义一样。
而迭代的核心是product和counter的不断更新。如上表中,product就是factorial的前2个参数不断的累乘更新成第一个参数;而第二个参数则是counter,其不断的加1来更新自己。
product<- counter * product counter< - counter + 1
? ?
1 2
#include
int factorialRecursive(int n);int factorialIteration(int product, int counter, int max_count); int main() { int n;
cout<<\an integer:\<
cout< return0; } int factorialRecursive(int n) { int sum=1; if(n==1) sum*=1; else sum=n*factorialRecursive(n-1); return sum; } int factorialIteration(int product, int counter, int max_count) {