什么是迭代-Iterative:重复某些操作,直到满足某些结果
迭代-Iterative的基本形式
包括循环和条件语句,来决定是否继续执行或者停止
迭代-Iterative的基础语法
def IterativeFunction() :
<some local variables if required>
while <someCondition == TRUE> :
# Perform a task
递归、迭代全面对比
1、定义
递归:程序反复执行,直到基本条件得到满足
迭代:循环执行某些操作,直到条件满足
2、应用
递归:递归的一般执行对象是函数,即反复调用某个、某些函数
迭代:迭代的一般执行对象是变量,即对变量(list)反复执行某些操作
3、代码长度
递归:短、小、精简
迭代:长且杂乱
4、速度
递归:慢
迭代:快
对比案例1:Calculating Factorial
### Iterative
def factorial(targetNumber) :
index = targetNumber - 1 # set the index to target - 1
while index >= 1 :
targetNumber = targetNumber * index # multiply targetNumber with one less than itself, i.e, index here
index -= 1 # reduce index in each iteration
return targetNumber
# Driver Code
targetNumber = 5
result = factorial(targetNumber)
print("The factorial of " + str(targetNumber) + " is: " + str(result))
### Recursive
def factorial(targetNumber) :
# Base case
if targetNumber == 1 : # Factorial of 1 is 1
return 1
# Recursive case
else :
return (targetNumber * factorial(targetNumber - 1))
# Driver Code
targetNumber = 5
result = factorial(targetNumber)
print("The factorial of " + str(targetNumber) + " is: " + str(result))
对比案例2:反转字符串
### Iterative
def reverseStringIter(string):
reverse = ''
len = length(string)-1
while len>=0:
reverse = reverse + string[len]
len = len-1
# Driver Code
targetVariable = "Educative"
print(reverseStringIter(targetVariable))
### Recursive
def reverseStringRec(string):
if len(string)==0: return string
else:
return reverseStringRec(string[1:])+string[0]
# Driver Code
targetVariable = "Educative"
print(reverseStringRec(targetVariable))
对比案例3:计算string中的元音字母数
# helper function
def isVowel(character):
character = character.lower()
vowels = 'aeiou'
if character in vowels: return 1
else: return 0
### Iterative
def main_iter(string):
count = 0
# Condition
for i in string:
if isVowel(i):
count += 1
return count
### Recursive
def main_recur(string, n):
# Base function
if n==1:
return isVowel(string[0])
return main_recur(string[1:],n-1) + isVowel(string[0])
思路
循环:在主函数中循环string的每个字符,使用helper function判断每个字符是否为元音
递归:递归执行主函数,并将中间步骤以栈的方式存储;在函数满足base condition之后,反向执行计算操作
对比案例4:计算某个数的平方
Mathematically we know that:
### Iterative
def findSquare(testVariable) :
return testVariable * testVariable
### Recursive
def findSquare(targetNum):
# Base case
if targetNum==0: return 0
else:
return findSquare(targetNum-1) + 2*targetNum + 1
对比案例5:寻找某个值出现的index
输入
- A variable
arr
that contains the array that will be searched. - A variable
testVariable
, being the number that will be searched. - A variable
currentIndex
that contains the starting index of thearr
array.
### Iterative
def firstIndex(arr, testVariable, currentIndex) :
if testVariable not in arr: return -1
else:
for i in range(len(arr)):
if arr[i] == testVariable:
return i
else: pass
return None
### Recursive
def firstIndex(arr, testVariable, currentIndex):
if len(arr)==currentIndex:
return -1
if arr[currentIndex]==testVariable:
return currentIndex
else: return firstIndex(arr, testVariable, currentIndex+1)
对比案例6:计算斐波那契数列
### Recursive
def fibonacci(testVariable):
if testVariable <= 1 :
return testVariable
return(fibonacci(testVariable - 1) + fibonacci(testVariable - 2))
### Iterative
def fibonacci(testVariable):
fn0 = 0
fn1 = 1
for i in range(0, testVariable):
temp = fn0 + fn1
# Setting variables for next iteration
fn0 = fn1
fn1 = temp
return fn0
点赞❤️ 评论+收藏, 算法路上我们同行