递归和迭代 联系客服

发布时间 : 星期一 文章递归和迭代更新完毕开始阅读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 usingnamespacestd;

int factorialRecursive(int n);int factorialIteration(int product, int counter, int max_count); int main() { int n;

cout<<\an integer:\<>n;

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) {