1. 程式人生 > >1.遞迴和非遞迴分別實現求第n個斐波那契數。 遞迴與非遞迴的典型題型

1.遞迴和非遞迴分別實現求第n個斐波那契數。 遞迴與非遞迴的典型題型

1.遞迴和非遞迴分別實現求第n個斐波那契數。

2.編寫一個函式實現n^k,使用遞迴實現

  1. 寫一個遞迴函式DigitSum(n),輸入一個非負整數,返回組成它的數字之和,例如,呼叫DigitSum(1729),則應該返回1+7+2+9,它的和是19

  2. 編寫一個函式reverse_string(char * string)(遞迴實現) 實現:將引數字串中的字元反向排列。 要求:不能使用C函式庫中 的字串操作函式。

5.遞迴和非遞迴分別實現strlen 6.遞迴和非遞迴分別實現求n的階乘 7.遞迴方式實現列印一個整數的每一位 1. #include<stdio.h>//斐波那契數列為1 1 2 3 5 8… 前兩個數的和等於第三個數

int fib(int n) { if(n<=2) { return 1; } if(n>2) return fib(n-1)+fib(n-2); } int main() { int n = 0; scanf("%d",&n); fib(n); printf("%d\n",fib(n)); return 0; } 方法2 #include<stdio.h> int main() { int a = 1; int b = 1; int c = 0; int n = 0; scanf("%d",&n); if(n<=2) { printf(“這個數為%d”,a);

}	
	while(n>2)
	{
		c = a+b;
	    a = b;
	    b = c;
	    n--;
	}
	printf("%d",c);		
return 0;

} 2. #include<stdio.h> int fib(int n) { if(n<=2) { return 1; } if(n>2) return fib(n-1)+fib(n-2); } int main() { int n = 0; scanf("%d",&n); fib(n); printf("%d\n",fib(n)); return 0; } 3. #include<stdio.h> int print(int n) { int m=0; int sum=0; if(n!=0) { m=n%10;

	sum=m+print(n/10);
}

return sum;

} int main() { int n=1234; print(n); printf("%d",print(n)); return 0; } 4. #include<stdio.h> int my_strlen(char *string) { int count=0; while(*string) { count++; string++; } return count; } void reverse_string(char * string) { if(*string) { int len=my_strlen(string); char temp=string[0]; string[0]=string[len-1]; string[len-1]=’\0’; reverse_string(string+1); string[len-1]=temp; }

} int main() { char str[]=“abcsef”; reverse_string(str); printf("%s",str); return 0; } 5. #include<stdio.h> #include<assert.h> int print(char *str)//非遞迴寫法 { int count=0; while(str++) { count++; } return count; } int print(const char str)//遞迴寫法 { int count=0; assert(str!=NULL); if(str==’\0’) { return 0; } return 1+print(str+1); } int main() { char str=“abcdef”; print(str); printf("%d\n",print(str)); return 0; } 6. int my_print(int n,int k)//非遞迴求階乘 { int sum=1; int p=n; int q=k-1; int i=0; if(k<1) { return 1; } if(k>=1) { for(i=0; i<=q; i++) sum=sump; } return sum; } int my_print(int n,int k)//遞迴求階乘 { if(k<1) { return 1; } if(k>=1) return nmy_print(n,k-1); } int main() { int m=0; int n=0; printf(“請輸入n,k\n”); scanf("%d%d",&m,&n); my_print(m,n); printf("%d\n",my_print(m,n)); return 0; } 7. void my_print(int m)//用遞迴列印每個數的每一位 { if(m>9) { my_print(m/10); } printf("%d “,m%10); } int main() { int m=0; printf(“請輸入一個數字\n”); scanf(”%d",&m); my_print(m); return 0; }