问:用递归算法描述Fibonacci数列的伪代码
- 答:function i(n){
if(n == 1 | n ==2){
return 1;
}else{
return i(n-1) + i(n-2);
}
}
问:按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。
- 答:arrs[100000][100000];
a[100000];
f(i,zhi){
if(i==4){
arrs[]=a;
return;
}
a[i]=zhi;
f(i+1,zhi+3);
f(i+1,zhi+4);
}
f(0,0)
arrs就是结果,并且是排了序的。 - 答:开始的程序控制语句的基础练习,如开头:
酒店与多个循环,分支控制结构,以确定如何在控制台输出三角形,倒三角形,等边三角形,等腰三角形练习,正方形,长方形,平行四边形,菱形,另一个是大多形状。和尽可能从用户输入的参数来完成图形输出程序的适应。
包装 - 被转移到不同凡响,搜索算法学习练习,如:递归算法,帕斯卡三角形,冒泡,快速插入排序算法,如运动。
- 以后,你可以学习Swing桌面开发的基本知识。使用Swing良好的设计,进一步学习Java语言来实现各种设计模式,比如Swing是最常见的模式,观察者模式,单例模式,工厂模式,抽象工厂模式,等等。以后有限公司返回了,你可以学到一些知识的J2EE,如JSP,Servlet的,以及一些常用的框架如Hibernate,Spring中,Struts中,TopLink的,ibitas,DWR等上。
这些只是Java的知识,要想J2EE,还要学习HTML,JS,XML,CSS,AJAX和一些常见的富客户端框架库,如原型,ExtJS的,JQuery的,等。许多
学习内容,要循序渐进,以达到良好的效果。否则你不会得到一半。需要注意的是学习的过程中必须采取一些好的经验(设计模式是公认的获得经验)学习,所以能迅速提高。
问:试写出求递归函数F(n)的递归算法,并消除递归
- 答:你先了解这个函数的作用,结果就是 n*(n/(2^1)*(n/(2^2))*(n/(2^3))*(n/(2^4))……*1
n*(n/2)*(n/4)*(n/8)*……*1
while( n >= 0)
{
if(n !=0)
{ push();//将n压入栈内
n = n/2
}
else
{
push(n+1);//或者是push(1);
}
}
double result = 1;
while(栈不为空)
{
result = result * pop();//取出值并相乘
}
printf("%lf",result);
这个是伪代码哈,自己去实现 - 答:递归就是本身调用自己。如n!=n(n-1)!,你定义函数f(n)=nf(n-1)而f(n-1)又是这个定义的函数。这就是递归。
实现递归。简单说来从未知的推到已知的
如:3!=3*2!
2!=2*1!
1!=1(已知的)
然后从已知再返回调用给上一层。到你所要求的
1!=1(已知)
2!=2*1!=2*1=2
3!=3*2!=3*2=6
递归结束 - 答://java代码
import java.util.Stack;
public class Test5 {
public static void main(String[] args) {
for(int n=0; n<=10; n++){
System.out.println("f(" + n + ")\t=\t" + f(n));
}
}
public static int f(int n){
if(n == 0){
return 1;
}
int value = 0;
Stack s = new Stack();
s.push(1); //f(0)入栈
for(int i=1; i<=n; i++){
//计算f(i)的值
value = i * Integer.parseInt(s.get(i/2).toString());
s.push(value); //f(i)入栈
}
return value;
}
} - 答:#include<stdio.h>
#include<stdlib.h>
int main()
{
int x;
scanf("%d",&x);
if(x<0)
{
printf("输入错误!程序结束\n");
exit(0);
}
int result=1;
while(x>0)
{
result*=x;
x/=2;
}
printf("F(%d)=%d",x,result);
return 0;
} - 答:第二个式子F(n) = nF(n/2),(n>0),其中的n/2是指整除还是实除?如果实除的话,对于大于0的n,递归都不会终止。