关于递归的一些题型

来源:互联网 发布:小米盒子如何连接网络 编辑:程序博客网 时间:2024/05/16 05:35
//1.递归和非递归分别实现求第n个斐波那契数。#pragma warning(disable:4996)#include <stdio.h>#include <windows.h>//递归int fib(int n){if (n <= 2){return 1;}else{return fib(n - 1) + fib(n - 2);}}//非递归int fib_1(int n){int prev_p = 1;int prev = 1;int next = 1;while (n>2){next = prev_p + prev;prev_p = prev;prev = next;n--;}return next;}int main(){int n = 0;printf("请输入你想要求的数的序号:");scanf("%d", &n);printf("%d\n", fib(n));printf("%d\n", fib_1(n));system("pause");return 0;}//2.编写一个函数实现n^k,使用递归实现。#include <stdio.h>#include <windows.h>#pragma warning(disable:4996)int power(int n, int k){if (k == 0){return 1;}else{return n*power(n, k - 1);}}int main(){int n = 0;int k = 0;printf("请输入两个整数:");scanf("%d %d", &n, &k);printf("%d\n", power(n, k));system("pause");return 0;}//3.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和。例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19.#include <stdio.h>#include <windows.h>#pragma warning(disable:4996)int DigitSum(int n){int m = 0;int sum = 0;if (n!=0){m = n % 10;n /= 10;sum = m + DigitSum(n);}return sum;}int main(){int n = 0;printf("Please Enter:");scanf("%d", &n);printf("%d\n", DigitSum(n));system("pause");return 0;}//4.编写一个函数递归实现,将参数字符串的字符反向排列。要求:不能使用c函数库中的字符串操作函数#include <stdio.h>#include <windows.h>#include <assert.h>void reversePrint(char *str){assert(str);if (*str == '\0'){return 0;}reversePrint(str + 1);printf("%c", *str);}int main(){reversePrint("abcd1234");system("pause");return 0;}//5.递归与非递归分别实现strlen。#include <stdio.h>#include <windows.h>#include <assert.h>//递归int strlen(const char *str){if (*str == '\0'){return 0;}else{return 1 + strlen(str + 1);}}//非递归int strlen(const char* str){int count = 0;while (*str){count++;str++;}return count;}int main(){char *p = "abcd1234";int len = strlen(p);printf("len:%d\n", len);system("pause");return 0;}//6.递归与非递归分别实现求n的阶乘。#include <stdio.h>#include <windows.h>#pragma warning(disable:4996)//递归int factorial(int n){if (n <= 1){return 1;}else{return n*factorial(n - 1);}}//非递归int factorial_1(int n){int i = 1;int ret = 1;for (i = 1; i <= n; i++){ret *= i;}return ret;}int main(){int num = 0;printf("Please Enter:");scanf("%d", &num);printf("%d\n", factorial(num));printf("%d\n", factorial_1(num));system("pause");return 0;}//7.递归方法实现打印一个整数的每一位。#include <stdio.h>#include <windows.h>#pragma warning(disable:4996)void print(int n){if (n > 9){print(n / 10);}printf("%d ", n % 10);}int main(){int num = 0;printf("请输入一个整数:");scanf("%d", &num);print(num);system("pause");return 0;}

原创粉丝点击