1.确定递归公式
2.确定边界(终了)条件
递归的一般模式
procedure aaa(k:integer)
begin
if k=1 then (边界条件及必要 *** 作)
else begin
aaa(k-1)
(重复的 *** 作)
end
end
C#:例子
例:一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少。
public class MainClass{public static void Main(){Console.WriteLine(Foo(30))}public static int Foo(int i){if (i <= 0)return 0else if(i >0 &&i <= 2)return 1else return Foo(i -1) + Foo(i - 2)}}
又如:
procedure a
begin
.
.
.
a
.
.
.
end
这种方式是直接调用.
又如:
procedure c(形参)forward
procedure b
局部说明
begin
. .
c(实参)
. .
end
procedure c
局部说明;
begin
. .
b
. .
end
这种方式是间接调用.
例1计算n!可用递归公式如下:
fac:=n*fac(n-1) {当n>0时}
fac(n)={
fac:=1{ 当n=0时}
可编写程序如下:
program facn
var
n:integer
function fac(n:integer):real
begin
if n=0
then fac:=1
else fac:=n*fac(n-1)
end
begin
write('n=')readln(n)
writeln(n,'!=',fac(n):0:0)
end. JavaScript:例子//递归算法//递归算法function recursionAlgorithm(num){if(num <= 1)//判断如果num小于等于1的情况下,返回本身{ return 1 }else{ return num * arguments.callee(num - 1) //调用函数本身进行返回}}
1、首先本题的思路已经给出,要求用递归算法。
2、程序源代码如下:
#include<stdio.h>
int sum(int n)
int main()
{
int i=100
printf("1~%d的和为:\n",i)
printf("%d\n",sum(100))
return 0
}
//下面是一个递归求和函数
int sum(int n)
{
if (n==1)
return 1
else
return n+sum(n-1)
}
3、程序的输出结果如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)